Ejemplo n.º 1
0
 public virtual void RecvAsync(AsyncUserToken iAsyncUserToken)
 {
     iAsyncUserToken.ActiveDateTime = DateTime.Now;
     if (iAsyncUserToken.RecvEventArgs.BytesTransferred > 0 &&
         iAsyncUserToken.RecvEventArgs.SocketError == SocketError.Success)
     {
         //如果处理数据返回失败,则断开连接
         if (!iAsyncUserToken.RecvAsync())
         {
             CloseSocket(iAsyncUserToken);
         }
         else
         {
             //否则投递下次接收数据请求
             // true I/O操作处于挂起状态(会引发SocketAsyncEventArgs.Completed 上的事件e),
             // false I/O操作同步完成(不会引发会引发SocketAsyncEventArgs.Completed 上的事件e,可能是直接返回操作结果)
             bool willRaiseEvent = iAsyncUserToken.Socket.ReceiveAsync(iAsyncUserToken.RecvEventArgs); //投递接收请求
             if (!willRaiseEvent)
             {
                 OnRecvAsync(iAsyncUserToken.RecvEventArgs);
             }
         }
     }
     else
     {
         CloseSocket(iAsyncUserToken);
     }
 }