2009-09-09 53 views
0

我在写服务器,需要能够发送消息给所有连接的客户端。SendAsync什么时候会完成?

我想决定是否应该为每个连接的套接字创建SocketAsyncEventArgs并一次发送所有数据包。

另一种方法是使用一个SocketAsyncEventArgs并逐个发送数据包。然后,在ProcessSend方法中调用SendAsync(在SendAsync完成时调用它)并拥有一个连接的套接字队列将是诱人的。但是,如果由于某种原因,SendAsync无法在合理的时间内完成?是否有任何情况会导致它永远无法完成?

回答

0

SendAsync将立即返回。如果您正在讨论发送操作本身,则不会完成,但如果套接字处于异常状态可能需要很长时间。

+0

是的,我知道该方法立即返回。但是,如果调用Completed事件处理程序之前的时间可能很长,那么发送队列并重新使用相同的SocketAsyncEventArgs将不安全。 – remdao 2009-09-09 14:33:47

+0

如果网络拥堵,甚至可能需要很长时间(反正比平常长);或者如果它是流量控制,保证传送协议,我认为如果接收器读取先前数据的速度较慢(以便连接的网络缓冲区已满并且受流量控制),则可能需要很长时间。 – ChrisW 2009-09-09 14:38:37

+0

@remdao:您应该假设SendAsync可能比您想要的时间更长,并进行相应的编码。在几乎所有情况下,你的完整事件都会很快发生,但你不能指望这一点。 – 2009-09-09 14:48:41

相关问题