Example #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);
                 }
             }
         }
     }
Example #2
0
        /// <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();
        }
Example #3
0
        /// <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();
        }
Example #4
0
 /// <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();
 }
Example #5
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;
                }
                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();
        }