Exemplo n.º 1
0
 private void ProcessHeader(IAsyncResult ar)
 {
     if (Connected)
     {
         try
         {
             int byteRead = socket.EndReceive(ar);
             if (byteRead == 0)
             {
                 pool.RemoveSocket(this);
                 pool.NetworkClose();
                 return;
             }
             var readBytes = (byte[])ar.AsyncState;
             messageStream.Write(readBytes, 0, byteRead);
             long remaining = 4 - messageStream.Length;
             if (remaining > 0)
             {
                 ReadBuffer(remaining, HEADER);
             }
             else
             {
                 messageStream.Position = 0;
                 int mailSize = ReadInt(messageStream);
                 ReadBuffer(mailSize, BODY);
                 expectingBodyLen = mailSize;
             }
         }
         catch (Exception e)
         {
             pool.RemoveSocket(this);
             pool.NetworkException(e);
         }
     }
 }