“无法执行对套接字的操作,因为系统缺少足够的缓冲区空间或因为队列已满”

我在C#中编写了一个IP多播应用程序。 编译很好,但在运行时这行:

sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("224.100.0.1"))); 

抛出未处理的套接字exception:

无法执行套接字上的操作,因为系统缺少足够的缓冲区空间或队列已满

我搜索了Google中的错误,人们建议删除可能已启用的3GB开关(我的操作系统是Windows 7)。 我做到了,但仍然得到同样的错误。 可能是什么问题?

当资源(套接字?)或内存耗尽时,似乎会发生这种情况。 在命令提示符下运行:netstat -ab

我不确定套接字限制是什么。 我现在正在和这样的问题打架。

有关套接字限制的说明: http : //support.microsoft.com/kb/196271

它可能是端口耗尽。 当应用程序在短时间内创建过多的传出连接或者没有正确配置传出连接时 – 您的端口用完了。

以下是相当冗长的解释和诊断问题的方法的链接

如果超出资源限制,您可能会遇到此错误消息。 System.Net.Sockets.Socket实现IDisposable 。 一旦你完成它们,你会丢弃你的sockets吗?

将它们留给垃圾收集器是泄漏资源的绝佳方法。

我有同样的错误,但仅限于Windows 7.如果我在Vista上运行相同的多播应用程序,它可以工作。 它会弹出一个系统对话框来解锁来自应用程序的行为,但它会运行。 这可能是win7中改变的网络权限的事情。 我还在寻找解决方案。 如果其他人找到了,请发帖。

我在Windows Server 2008上遇到了同样的错误。在我的情况下,重新启动服务器(2年正常运行时间)问题解决了。

请参阅 – 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

尝试连接到本地MySQL数据库时,我遇到了同样的问题(也就是错误10055)。 我相信你需要增加操作系统允许的动态端口数量。

我在这里提到了适用于我的解决方案,我相信它也可能对您有所帮助,因为您使用的是Windows。 祝你好运!