在什么条件下winsock阻塞send()返回0?

时间:2012-04-03 18:49:30

标签: sockets winsock send blocking

MSDN说如下: “调用len参数为零的发送是允许的,并且将被实现视为成功。在这种情况下,send将返回零作为有效值。对于面向消息的套接字,将发送零长度传输数据报。”< / p>

我的问题是,如果len参数不为零,阻塞send()是否会返回0(假设没有设置超时)?

我还搜索了互联网,发现了以下内容:

http://tangentsoft.net/wskfaq/articles/bsd-compatibility.html

“在Winsock下,SIGPIPE / EPIPE功能根本不存在:send()将返回0表示正常断开连接,或者-1表示异常断开连接”。

然而,无论我怎么尝试,我都无法模拟“正常断开连接”,因此我不能让send()返回0。

提前致谢。

1 个答案:

答案 0 :(得分:0)

“正常”断开是指接收方在其连接结束时调用closesocket()以向发送方发送FIN数据包。当send()检测到FIN时,它知道连接已正常断开连接,并应返回0以通知您的代码。