有经验的程序员对 closesocket() 的担忧

Posted

技术标签:

【中文标题】有经验的程序员对 closesocket() 的担忧【英文标题】:A concern about closesocket() for experienced programmers 【发布时间】:2012-02-07 06:23:34 【问题描述】:

我想我可以通过阅读 MSDN 对 closesocket 的描述来回答这个问题,我希望有经验的人之一确认它,因为 MSDN 只是从我读过的内容中暗示它。

WSAENOBUFS 是缺少对已使用套接字的 closesocket 调用的症状吗?

【问题讨论】:

【参考方案1】:

WSAENOBUFS 错误消息的出现并不一定意味着它是缺少 closesocket 调用的症状。但它可能是。

如果您没有必要的资源或打开的套接字过多,系统会以此消息响应。但是,也可能是您适当地关闭了所有内容,但您尝试打开太多套接字或没有剩余资源。

【讨论】:

是的,我知道其他可能的解释,只是不知道会“抛出”哪个系统错误,所以我反过来问。感谢您的回答(也感谢 Ates 和 INS) 所以答案是肯定的。有一个上限,如果套接字未正确关闭,您有时会达到上限。【参考方案2】:

是的,这可能是未关闭的套接字泄漏的症状。

【讨论】:

【参考方案3】:

是的,这似乎与(左)打开的套接字数量有关;来自here。

【讨论】:

那是您在那里找到的一篇非常古老的文章。

以上是关于有经验的程序员对 closesocket() 的担忧的主要内容,如果未能解决你的问题,请参考以下文章

Windows 中对套接字的 closesocket() 调用需要 20 秒 [关闭]

closesocket 后服务器崩溃

socket中shutdown和closesocket的区别

closesocket() 未完成 IOCP 的挂起操作

如何强制系统关闭底层套接字

shoutdown()与closesocket()区别