Socket类有一个方法.AcceptAsync,它返回true或false。异步套接字 - 处理false socket.AcceptAsync值
我以为假返回值是一个错误情况,但在样品中微软提供了他们调用回调函数检查失败后同步异步插座,如下所示:
public void StartAccept(SocketAsyncEventArgs acceptEventArg)
{
if (acceptEventArg == null)
{
acceptEventArg = new SocketAsyncEventArgs();
acceptEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(AcceptEventArg_Completed);
}
else
{
// socket must be cleared since the context object is being reused
acceptEventArg.AcceptSocket = null;
}
m_maxNumberAcceptedClients.WaitOne();
bool willRaiseEvent = listenSocket.AcceptAsync(acceptEventArg);
if (!willRaiseEvent)
{
ProcessAccept(acceptEventArg);
}
}
/// <summary>
/// This method is the callback method associated with Socket.AcceptAsync operations and is invoked
/// when an accept operation is complete
/// </summary>
void AcceptEventArg_Completed(object sender, SocketAsyncEventArgs e)
{
ProcessAccept(e);
}
为什么他们这样做?它破坏了异步套接字的用途并停止了方法返回。
关键是要将两个完全不同的行为绑定到一个似乎只明确指出一个的函数。它被彻底记录的好事情......等等。我分享你的挫折感。 – QueueHammer 2010-03-16 19:49:10