如果连接仍然打开,Socket.Receive()可以返回0吗?

Jak*_*nes 5 .net c# sockets network-programming

我正在编写一个C#.NET服务器应用程序,通过套接字发送和接收数据,如果客户端应用程序崩溃而没有正确关闭套接字,我会遇到一些问题.

我已将'receive timeout'设置为给定值,并且我希望Socket.Receive()在该时间量之后抛出异常.但是该方法只返回0.

所以我的问题是:如果Socket.Receive()返回0 ,套接字是否仍然可以打开?或者我可以安全地假设它已经关闭了吗?

(可能有点难以理解.如果是这样,请在评论中告诉我)

jga*_*fin 13

不.如果你收到0就会失败.

来自MSDN:

如果远程主机使用Shutdown方法关闭Socket连接,并且已收到所有可用数据,则Receive方法将立即完成并返回零字节.

http://msdn.microsoft.com/en-us/library/8s4y8aff.aspx

  • @RobertHegner:这就是套接字的工作方式。仅当套接字关闭时才能接收 0。我链接的MSDN文章还不够官方吗?这是 C 方法的方法:http://msdn.microsoft.com/en-us/library/windows/desktop/ms740121(v=vs.85).aspx (2认同)