Пример #1
0
 /// <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);
                 }
             }
         }
     }
Пример #2
0
        /// <summary>
        /// 接收数据完成后的回调
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="async">异步回调参数</param>
        private void onReceive(object sender, SocketAsyncEventArgs async)
#endif
        {
            try
            {
#if DOTNET2
                if (IsKeepAliveReceive)
                {
                    if (!async.CompletedSynchronously)
                        KeepAliveReceiveTimeout.Cancel(httpSocket); }
                    IsKeepAliveReceive = false;
                }
                else if (!async.CompletedSynchronously)
                {
                    ReceiveTimeout.Cancel(httpSocket);
                }
                if (onReceiveAsync(async))
                {
                    return;
                }
#else
                if (IsKeepAliveReceive)
                {
                    KeepAliveReceiveTimeout.Cancel(httpSocket);
                    IsKeepAliveReceive = false;
                }
                else
                {
                    ReceiveTimeout.Cancel(httpSocket);
                }
                if (onReceive())
                {
                    return;
                }
#endif
            }
Пример #3
0
        /// <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.Buffer)
                        {
                            byte *start = bufferFixed + Buffer.StartIndex;

                            Memory.CopyNotNull(start + receiveIndex, start, receiveCount = receiveSize);
                        }
                        HeaderEndIndex -= receiveIndex;
                        receiveIndex    = 0;
                }
                //isHeader = 0;
                IsKeepAliveReceive = true;
#if DOTNET2
                SocketError  socketError;
                IAsyncResult async = socket.BeginReceive(Buffer.Buffer, Buffer.StartIndex + receiveCount, ReceiveBufferSize - receiveCount, SocketFlags.None, out socketError, onReceiveAsyncCallback, socket);
                if (socketError == SocketError.Success)
                {
                    if (!async.CompletedSynchronously)
                    {
                        KeepAliveReceiveTimeout.Push(httpSocket, socket);
                    }
                    return;
                }
#else
                while (Interlocked.CompareExchange(ref httpSocket.ReceiveAsyncLock, 1, 0) != 0)
                {
                    Thread.Sleep(0);
                }
                receiveAsyncEventArgs.SetBuffer(Buffer.StartIndex + receiveCount, ReceiveBufferSize - receiveCount);
                if (socket.ReceiveAsync(receiveAsyncEventArgs))
                {
                    KeepAliveReceiveTimeout.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();
        }
Пример #4
0
        /// <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;
                }
                //isHeader = 0;
                IsKeepAliveReceive = true;
#if DOTNET2
                SocketError  socketError;
                IAsyncResult async = socket.BeginReceive(Buffer.Buffer, Buffer.StartIndex + receiveCount, ReceiveBufferSize - receiveCount, SocketFlags.None, out socketError, onReceiveAsyncCallback, socket);
                if (socketError == SocketError.Success)
                {
                    if (!async.CompletedSynchronously)
                    {
                        KeepAliveReceiveTimeout.Push(httpSocket, socket);
                    }
                    return;
                }
#else
                httpSocket.ReceiveAsyncLock.EnterSleepFlag();
                receiveAsyncEventArgs.SetBuffer(Buffer.StartIndex + receiveCount, ReceiveBufferSize - receiveCount);
                if (socket.ReceiveAsync(receiveAsyncEventArgs))
                {
                    httpSocket.ReceiveAsyncLock.SleepFlag = 0;
                    KeepAliveReceiveTimeout.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();
        }