Windows套接字错误代码10055

问题描述 投票:1回答:3

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

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

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

任何建议都会非常感激。

c windows sockets wsastartup wsacleanup
3个回答
2
投票

通常,当您正确关闭套接字时会发生这种情况。当你想关闭套接字时确保你有shutdownclosesockethttp://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_REUSEADDRsetsocketopt"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


0
投票

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

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

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

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

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


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.