/// <summary> /// 接受头部换行数据 /// </summary> /// <param name="result">异步操作状态</param> private unsafe void onReceive(IAsyncResult result) { if (IsKeepAliveReceive) { if (!result.CompletedSynchronously) { KeepAliveReceiveTimeout.Cancel(httpSocket); } IsKeepAliveReceive = false; } else if (!result.CompletedSynchronously) { ReceiveTimeout.Cancel(httpSocket); } try { int count = httpSocket.SslStream.EndRead(result); if (count > 0) { receiveCount += count; if (searchEnd()) return; } if (receiveCount != ReceiveBufferSize && (count >= TcpServer.Server.MinSocketSize || ReceiveSizeLessCount++ == 0)) { if (!httpSocket.SslStream.BeginRead(Buffer.Buffer, Buffer.StartIndex + receiveCount, ReceiveBufferSize - receiveCount, receiveCallback, this).CompletedSynchronously) { ReceiveTimeout.Push(httpSocket, socket); } } } }
/// <summary> /// 开始接收数据 /// </summary> internal void Receive() { try { socket = httpSocket.Socket; Flag = HeaderFlag.None; receiveIndex = receiveCount = HeaderEndIndex = 0; IsKeepAliveReceive = false; #if DOTNET2 SocketError socketError; IAsyncResult async = socket.BeginReceive(Buffer.Buffer, Buffer.StartIndex, ReceiveBufferSize, SocketFlags.None, out socketError, onReceiveAsyncCallback, socket); if (socketError == SocketError.Success) { if (!async.CompletedSynchronously) { ReceiveTimeout.Push(httpSocket, socket); } return; } #else receiveAsyncEventArgs.SocketError = SocketError.Success; while (Interlocked.CompareExchange(ref httpSocket.ReceiveAsyncLock, 1, 0) != 0) { Thread.Sleep(0); } receiveAsyncEventArgs.SetBuffer(Buffer.StartIndex, ReceiveBufferSize); if (socket.ReceiveAsync(receiveAsyncEventArgs)) { ReceiveTimeout.Push(httpSocket, socket); Interlocked.Exchange(ref httpSocket.ReceiveAsyncLock, 0); return; } Interlocked.Exchange(ref httpSocket.ReceiveAsyncLock, 0); if (onReceive()) { return; } #endif } catch (Exception error) { httpSocket.Server.RegisterServer.TcpServer.Log.Add(Log.LogType.Debug, error); } //if (isHeader == 0) httpSocket.HeaderError(); }
/// <summary> /// 开始接收数据 /// </summary> internal void Receive() { try { socket = httpSocket.Socket; Flag = HeaderFlag.None; receiveIndex = receiveCount = HeaderEndIndex = 0; IsKeepAliveReceive = false; #if DOTNET2 SocketError socketError; IAsyncResult async = socket.BeginReceive(Buffer.Buffer, Buffer.StartIndex, ReceiveBufferSize, SocketFlags.None, out socketError, onReceiveAsyncCallback, socket); if (socketError == SocketError.Success) { if (!async.CompletedSynchronously) { ReceiveTimeout.Push(httpSocket, socket); } return; } #else receiveAsyncEventArgs.SocketError = SocketError.Success; httpSocket.ReceiveAsyncLock.EnterSleepFlag(); receiveAsyncEventArgs.SetBuffer(Buffer.StartIndex, ReceiveBufferSize); if (socket.ReceiveAsync(receiveAsyncEventArgs)) { httpSocket.ReceiveAsyncLock.SleepFlag = 0; ReceiveTimeout.Push(httpSocket, socket); httpSocket.ReceiveAsyncLock.Exit(); return; } httpSocket.ReceiveAsyncLock.ExitSleepFlag(); if (onReceive()) { return; } #endif } catch (Exception error) { httpSocket.Server.RegisterServer.TcpServer.Log.Exception(error, null, LogLevel.Exception | LogLevel.AutoCSer); } //if (isHeader == 0) httpSocket.HeaderError(); }
/// <summary> /// 开始接收数据 /// </summary> internal void Receive() { try { socket = httpSocket.Socket; Flag = HeaderFlag.None; receiveIndex = receiveCount = HeaderEndIndex = 0; IsKeepAliveReceive = false; ReceiveSizeLessCount = 0; if (!httpSocket.SslStream.BeginRead(Buffer.Buffer, Buffer.StartIndex, ReceiveBufferSize, receiveCallback, this).CompletedSynchronously) { ReceiveTimeout.Push(httpSocket, socket); } return; } catch (Exception error) { httpSocket.Server.RegisterServer.TcpServer.Log.Exception(error, null, LogLevel.Exception | LogLevel.AutoCSer); } httpSocket.HeaderError(); }
/// <summary> /// 接收数据下一个请求数据 /// </summary> internal void ReceiveNext() { try { int receiveSize = receiveCount - receiveIndex; if (receiveSize == 0) { receiveIndex = receiveCount = HeaderEndIndex = 0; } else { HeaderEndIndex = receiveIndex; if (searchEnd()) { return; fixed(byte *bufferFixed = Buffer.GetFixedBuffer()) { byte *start = bufferFixed + Buffer.StartIndex; AutoCSer.Memory.Common.CopyNotNull(start + receiveIndex, start, receiveCount = receiveSize); } HeaderEndIndex -= receiveIndex; receiveIndex = 0; } IsKeepAliveReceive = true; if (!httpSocket.SslStream.BeginRead(Buffer.Buffer, Buffer.StartIndex + receiveCount, ReceiveBufferSize - receiveCount, receiveCallback, this).CompletedSynchronously) { ReceiveTimeout.Push(httpSocket, socket); } return; } catch (Exception error) { httpSocket.Server.RegisterServer.TcpServer.Log.Exception(error, null, LogLevel.Exception | LogLevel.AutoCSer); } httpSocket.HeaderError(); }