我用C#编写了一个IP多播应用程序,它编译得很好,但在运行时这一行:
sock.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.AddMembership,
new MulticastOption(IPAddress.Parse("224.100.0.1")));
抛出未处理的套接字异常:
由于系统缺少足够的缓冲区空间或队列已满,无法在套接字上执行操作
我在谷歌搜索了这个错误,人们建议删除3GB开关(我的操作系统是Windows 7),它可能已经启用了。我这样做了,但仍然得到同样的错误。可能是什么问题?
9条答案
按热度按时间7gs2gvoe1#
可能是端口耗尽。当应用程序在短时间内建立了太多的传出连接或没有正确处理传出连接时-端口耗尽。
Here是指向相当冗长的说明的链接,也是诊断问题的方法
vsikbqxv2#
当资源(套接字?)或内存不足时,可能会发生这种情况。在命令提示符下运行:网络统计-ab
我不确定套接字的限制是什么,我自己也在和这样的问题作斗争。
插座限制说明:http://support.microsoft.com/kb/196271
esbemjvw3#
如果超出资源限制,您可能会遇到此错误消息。
System.Net.Sockets.Socket
实现了IDisposable
。您是否在处理完套接字后将其释放?把它们留给垃圾收集器是一种泄漏资源的好方法。
lhcgjxsq4#
我也遇到了同样的错误,但只是在Windows 7上。如果我在Vista上运行我的同一个多播应用程序,它会工作。它会弹出一个系统对话框来解除对应用程序行为的阻止,但它会运行。这可能是在win7中更改了网络权限的事情。我仍在寻找解决方案。如果其他人找到了一个,请发布。
vom3gejh5#
我在尝试连接本地MySQL数据库时遇到过同样的问题(也就是错误10055)。我认为您需要提高操作系统允许的动态端口数。
对我有效的解决方案被提到here我相信它也可能对你有帮助,因为你正在使用Windows。祝你好运!
pbgvytdp6#
我在Windows Server 2008上也遇到了同样的错误。在我的情况下,重新启动服务器后(正常运行时间为2年)问题解决了。
3xiyfsfu7#
参见-http://support.microsoft.com/kb/2553549和https://support.microsoft.com/en-us/kb/929851(您可以确定需要多少动态输出端口)。在第二篇文章中,将TcpTimedWaitDelay设置为dword十进制值30。这样,当套接字释放到系统时,清除速度会更快。参见-technet.microsoft.com/en-us/library/cc938217.aspx
yyyllmsg8#
在Windows Server 2012 R2 Datacenter x64上联系瑞典名为Loopia的外部电子邮件提供商时遇到此错误。
服务器已经快一年没有重新启动了,重新启动后一切正常。
An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full 194.9.94.72:993
描述:在执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以了解有关错误以及代码中出现错误的位置的详细信息。
Exception Details: System.Net.Sockets.SocketException: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full 194.9.94.72:993
busg9geu9#
我也遇到了同样的问题,并注意到有很多旧的/被遗忘的自定义后台进程在服务器上运行,并消耗套接字。甚至相同的进程由不同的用户远程运行。
通过任务管理器进行的简短清理完成了这项工作。如果可以的话,重新启动也是一个选择。