1

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

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

我读过很多关于这个麻烦的文献,所以我不是唯一一个遭受它的人,但我不知道如何解决它,或者至少绕过它,因为当它失败时,它会导致我的电脑失去了互联网连接。我已经通过捕获此错误进行了尝试,当它发生时WSACleanup()WSAStartup()即使它不是最佳实践,也会执行 a ......但我的应用程序仍然会陷入此错误。

任何建议将不胜感激。

4

3 回答 3

2

通常,当您正确关闭套接字时,就会发生这种情况。确保您同时拥有两者shutdown以及closesocket何时关闭套接字(http://msdn.microsoft.com/en-us/library/windows/desktop/ms741394(v=vs.85).aspx)来自 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使用setsocketopt哪个"Allows the socket to be bound to an address that is already in use"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

于 2013-05-23T11:47:14.160 回答
0

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

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

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

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

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

于 2013-05-23T11:38:13.677 回答
0

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

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

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

于 2018-09-12T11:12:37.460 回答