我在C#中编写了一个IP多播应用程序。编译很好,但在运行时这一行:
sock.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.AddMembership,
new MulticastOption(IPAddress.Parse("224.100.0.1")));
抛出未处理的套接字异常:
无法执行套接字上的操作,因为系统缺少足够的缓冲区空间或者队列已满;
我搜索了Google中的错误,人们建议删除可能已启用的3GB开关(我的操作系统是Windows 7)。我做到了,但仍然得到同样的错误。可能是什么问题?
答案 0 :(得分:8)
当你耗尽资源(套接字?)或内存时,似乎会发生这种情况。 在命令提示符下运行: netstat -ab
我不确定套接字限制是什么。我现在正在与这样的问题作斗争。
有关套接字限制的说明: http://support.microsoft.com/kb/196271
答案 1 :(得分:7)
可能是港口用尽了。 当应用程序在短时间内进行过多的传出连接或者没有正确配置传出连接时 - 您的端口用完了。
Here是相当冗长的解释和诊断问题的方法的链接
答案 2 :(得分:4)
如果超出资源限制,您可能会遇到此错误消息。 System.Net.Sockets.Socket
实施IDisposable
。一旦你完成它们,你是否处理过你的插座?
将它们留给垃圾收集器是泄漏资源的绝佳方法。
答案 3 :(得分:3)
我有同样的错误,但仅限于Windows 7.如果我在Vista上运行相同的多播应用程序,它可以正常工作。它会弹出一个系统对话框来解锁来自应用程序的行为,但它会运行。这可能是win7中改变了网络权限的事情。我还在寻找解决方案。如果其他人找到了,请发帖。
答案 4 :(得分:1)
我在Windows Server 2008上遇到了同样的错误。在我的情况下,重新启动服务器(2年正常运行时间)后问题就解决了。
答案 5 :(得分:0)
请参阅 - http://support.microsoft.com/kb/2553549和https://support.microsoft.com/en-us/kb/929851(您可以确定所需的动态outbout端口数)。与第二篇文章一起,将TcpTimedWaitDelay设置为dword十进制值30.因此,当套接字被释放到系统时,清除速度更快。 请参阅 - technet.microsoft.com/en-us/library/cc938217.aspx
答案 6 :(得分:0)
尝试连接本地MySQL数据库时,我遇到了同样的问题(a.k.a错误10055)。我相信你需要增加操作系统允许的动态端口数量。
提到了适用于我的解决方案here 我相信它也可以帮到你,因为你使用的是Windows。 祝你好运!
答案 7 :(得分:0)