什么原因导致winsock 10055错误? 我应该如何解决问题?

我正在调查一些自定义应用程序链(其中一些我们控制,有些不)的问题上的一些问题,并希望得到一些技术问题的意见,以解决问题。

No buffer space available. An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full. 

从研究来看,非分页池和端口似乎是唯一可能导致此错误的资源。 有没有可能导致10055错误的另一个资源?

目前,我们在应用程序上安装了perfmon计数器,在大多数情况下,非分页池的使用率看起来很低。 打开TCP连接看起来很低,我不知道另一种方式来监视端口。

由于它只发生在生产中,我们无法使用更多的入侵计数器。 尽pipe听到其他解决scheme仍然很有趣。 我相信其他人可以使用这些信息。

有什么其他的工具或程序,你会build议诊断哪个应用程序是造成这个问题?

更新:

该平台是使用/ 3G开关的Windows Server 2003 x86。 作为参考,x86一般有256MB的NPP存储,/ 3G降低到128mb。 一般来说,你想避免这种configuration,以避免NPP问题。 ( 参考 )

我们有一个应用程序的来源。 我写了相当复杂的testing安全带试图重现行为无济于事。

如前所述,这个问题只发生在生产中。 因此,数据包监控已被避免。 我们目前有性能计数器设置,可以监视核电站,线程,networkingstream量等等。由于perfmon的时间间隔是1秒,所以你可能会在这个窗口内出现微爆。 有一些主观的证据表明这不是问题。

基本的情况是,连接的另一端说它已经closures了连接,因为错误代码为10055。 在断开之前,核电厂(以及一般的性能)看起来很稳定,这表明一些其他资源是原因。

更新:

我还要重申,原来的问题与诊断有关,而不是解决scheme。 我仍然没有明确的答案是什么导致10055错误。 检查驱动程序和硬件,并重新安装操作系统是伟大的,但它回避了原来的问题。

根据谷歌search,拉姆短缺也可能导致这种情况。 我发现通过谷歌查找下面的一些错误条件是内存不足的问题,其中基本操作系统很less访问RAM。 我的猜测是,同样types的问题可以很容易地在一个虚拟的环境中重新创build,而这个虚拟环境对于内存来说是不够的

一个更基本的故障排除问题很简单 – 生产环境有什么不同?

您是否在Windows 2003 x64或Windows 2008中testing过该应用程序?

在你的问题的第二部分..

以下工具可用于疑难解答和修复Winsock错误。

嗅探器:

  http://www.wireshark.org/ 

垫片:

 http://www.sstinc.com/winsock.html
 http://www.win-tech.com/html/socktspy.htm

通用工具来跟踪系统状态和资源

 http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
 http://technet.microsoft.com/en-us/sysinternals/bb896645

检测API调用的工具

 http://www.apimonitor.com/
 http://www.nektra.com/products/spystudio-api-monitor/

debugging器

 http://www.ollydbg.de/
 http://www.immunitysec.com/products-immdbg.shtml

反转工具或反编译器

 http://www.hex-rays.com/products/ida/index.shtml
 http://www.hex-rays.com/products/decompiler/index.shtml

您的标准IDE和编译器

 http://www.microsoft.com/visualstudio/en-us

以下是其他工具的列表:

 http://www.sockets.com/devtools.htm

其他参考资料:

https://stackoverflow.com/questions/8118870/howto-debug-winsock-api-calls

http://brandon.fuller.name/archives/2007/01/24/19.44.29/

http://tangentsoft.net/ <—-可能是最好的一个

重新安装2008 R2服务器,这将有希望的工作。 有绝对新的驱动程序架构和更好的networking可扩展性。

我不知道这是否会有所帮助,但是在每隔几秒发送UDP广播消息的应用程序中遇到了10055错误。 当广播应用程序在一台笔记本电脑上睡觉并被唤醒时,就发生了这种情况。

忽略几个连续UDP广播的错误解决了这个问题。

当应用程序在睡眠之后重新开始广播时,看起来WinSock还没有完全恢复。