C语言 Windows 套接字错误代码 10055



我开发了一个在Windows上使用套接字的应用程序。它运行良好,但一段时间后,互联网连接开始失败,最后我收到此错误 (10055(,这意味着我的应用程序缓冲区空间不足。

实际上,我认为我只使用我自己编写的代码的 2 个套接字,但确实我使用的是我不知道它是如何实现的 3rd 方库。

我读过有很多关于这个麻烦的文献,所以我不是唯一一个遭受它困扰的人,但我无法意识到如何解决它,或者至少绕过它,因为当它失败时,它会让我的电脑失去互联网连接。我已经通过捕获此错误来尝试它,当它发生时,做一个WSACleanup()WSAStartup()即使这不是最佳实践......但是我的应用程序仍然在此错误中堆叠。

任何建议将不胜感激。

通常,

当您没有正确关闭套接字时,就会发生这种情况。当您要关闭套接字 (http://msdn.microsoft.com/en-us/library/windows/desktop/ms741394(v=vs.85(.aspx(时,请确保您同时具有shutdownclosesocket 从 MSDN - "Note To assure that all data is sent and received on a connection, an application should call shutdown before calling closesocket"

bind套接字之前,您可以使用SO_REUSEADDR进行"Allows the socket to be bound to an address that is already in use" setsocketopt(http://msdn.microsoft.com/en-us/library/windows/desktop/ms740476(v=vs.85(.aspx(

最后,看看这个博客 - http://blogs.technet.com/b/yongrhee/archive/2011/12/19/how-to-troubleshoot-a-handle-leak.aspx

应用程序中有一个或多个资源泄漏。

没有代码,我只能给出一般建议。

我建议您运行 Valgrind 或类似的工具来帮助您找到资源泄漏。

另一种方法是查看代码。如果泄漏是最近开始的,您可以通过查看最近的更改来找到它。

MSDN有一篇关于如何使用Visual Studio查找内存泄漏的文章。(请记住在链接页面上选择您的Visual Studio版本(。

Windows 中此错误的一个原因是临时 TCP 端口池耗尽。

重现

此错误很容易:只需创建一个在绑定端口 0 中循环的程序。很快这个错误就会发生。

当我们将 0 传递给绑定套接字函数时,Windows 会选择一个要使用的临时端口。

相关内容

最新更新