在这个 MSDN 页面上:
它建议使用以下方法关闭套接字的发送端:
shutdown(SOCK_ID, SD_SEND);
我为什么要?
也许我不必,它只是一个建议?也许是为了节省内存?也许是为了速度?
有人有想法吗?
原文由 fdwfg wdfwdfv 发布,翻译遵循 CC BY-SA 4.0 许可协议
在这个 MSDN 页面上:
它建议使用以下方法关闭套接字的发送端:
shutdown(SOCK_ID, SD_SEND);
我为什么要?
也许我不必,它只是一个建议?也许是为了节省内存?也许是为了速度?
有人有想法吗?
原文由 fdwfg wdfwdfv 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答1.3k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
4 回答840 阅读
1 回答914 阅读
1 回答949 阅读
1 回答714 阅读
1 回答816 阅读
答案在
shutdown()
文档中:换句话说,至少对于 TCP,调用
shutdown(SD_SEND)
会通知对等方您已完成发送更多数据,并且您可能很快就会关闭连接端。最好,同伴也会为你做同样的礼貌。这样,两个对等点都可以知道连接在两端是有意关闭的。这称为 正常 断开连接,而不是 中止 或 异常 断开连接。默认情况下,如果您不调用
shutdown(SD_SEND)
, ---closesocket()
将尝试为您执行正常关闭, 除非 套接字的延迟选项被禁用。最好不要依赖这种行为,在调用shutdown()
之前,您应该始终自己调用closesocket()
,除非您有充分的理由不这样做。