Windows套接字错误代码10055

时间:2013-05-23 11:08:27

标签: c windows sockets wsastartup wsacleanup

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

实际上我认为我只使用2个插槽和我自己做的代码,但我确实使用的是第三方库,我不知道它是如何实现的。

我读过有很多关于这个问题的文献,所以我不是唯一受此困扰的文学,但我不知道如何解决它,或者至少绕过它,因为当它失败时,它使我的电脑失去了互联网连接。我已经尝试过捕获此错误并在发生错误时执行WSACleanup()WSAStartup(),即使这不是最佳做法...但我的应用仍会堆积在此错误中。

任何建议都会非常感激。

3 个答案:

答案 0 :(得分:2)

通常,当您正确关闭套接字时会发生这种情况。如果要关闭套接字(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 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

答案 1 :(得分:0)

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

没有代码,我只能提供一般性建议。

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

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

MSDN有一个article on how to locate memory leaks using Visual Studio。 (请记住在链接页面上选择您的Visual Studio版本。)

答案 2 :(得分:0)

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

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

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