Socket 类有一个方法 .AcceptAsync,它返回 true 或 false。
我原以为 false 返回值是一个错误条件,但在 Microsoft 为异步套接字提供的示例中,它们在检查失败后同步调用回调函数,如下所示:
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);
}
他们为什么这样做呢?它违背了异步套接字的目的并阻止该方法返回。
来自接受异步 http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.acceptasync.aspx规格:
Returns false如果 I/O 操作
同步完成。这
SocketAsyncEventArgs.Completed
e 参数上的事件不会
引发并将 e 对象作为 a 传递
可以立即检查参数
方法调用返回后
检索操作的结果。
当它返回 false 时,您应该立即处理新接受的套接字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)