【问题标题】:"An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full"“无法对套接字执行操作,因为系统缺少足够的缓冲区空间或队列已满”
【发布时间】:2011-05-23 20:16:40
【问题描述】:

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

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

抛出未处理的套接字异常:

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

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

【问题讨论】:

  • 在我的情况下,它是机器上的恶意软件,试图连接到未知站点的次数过多。

标签: c# .net sockets windows-7


【解决方案1】:

可能是端口耗尽。 当应用程序在短时间内建立过多的传出连接或未正确处理传出连接时 - 您会用完端口。

Here 链接到相当冗长的解释和诊断问题的方法

【讨论】:

    【解决方案2】:

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

    我不确定套接字限制是什么。我自己目前正在解决这样的问题。

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

    【讨论】:

      【解决方案3】:

      如果超出资源限制,您可能会遇到此错误消息。 System.Net.Sockets.Socket 实现 IDisposable。使用完套接字后,您是否正在处理它们?

      将它们留给垃圾收集器是一种很好的资源泄漏方式。

      【讨论】:

      • 我在 HTTP 帖子中遇到了同样的问题。即使我使用using 正确处理它们,快速连续执行大量它们似乎会使 IIS 过载。想法?
      • @jocull 您的应用程序在哪里?在与 IIS 通信或由 IIS 托管的客户端计算机上?
      • smallvoid.com/article/winnt-tcpip-max-limit.html 也可能有助于解释操作系统施加的限制。
      • 这是一个与 IIS 对话的 .NET 控制台应用程序。基本上,SQL 请求是通过 Web 应用程序代理的。
      • @jocull 我遇到了完全相同的问题。我们的 webapp 做了很多 http 帖子,但最终开始失败,我尝试了 httpclinet 的静态实例,并且使用的版本都不起作用。
      【解决方案4】:

      我也有同样的错误,但仅在 Windows 7 上。如果我在 Vista 上运行相同的多播应用程序,它可以工作。它会弹出一个系统对话框以取消阻止应用程序的行为,但它会运行。这可能是win7中更改的网络权限。我仍在寻找解决方案。如果其他人找到了,请发布。

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          我在 Windows Server 2008 上遇到了同样的错误。就我而言,重启服务器后(正常运行时间为 2 年)问题解决了。

          【讨论】:

            【解决方案7】:

            请参阅 - http://support.microsoft.com/kb/2553549https://support.microsoft.com/en-us/kb/929851(您可以确定需要多少动态输出端口)。与第二篇文章一起,将 TcpTimedWaitDelay 设置为 dword 十进制值 30。因此,当套接字被释放到系统时,清除速度更快。 请参阅 - technet.microsoft.com/en-us/library/cc938217.aspx

            【讨论】:

              【解决方案8】:

              在 Windows Server 2012 R2 Datacenter x64 上联系名为 Loopia 的瑞典外部电子邮件提供商时遇到此错误。

              服务器已经将近一年没有重新启动了。重新启动后一切正常。

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

              描述:执行过程中发生了未处理的异常 当前的网络请求。请检查堆栈 跟踪以获取有关错误及其起源的更多信息 代码。

              异常详细信息:System.Net.Sockets.SocketException:一个 无法对套接字执行操作,因为系统缺少 足够的缓冲区空间或因为队列已满 194.9.94.72:993

              【讨论】:

                猜你喜欢
                • 2011-02-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-12-12
                • 2013-06-14
                • 1970-01-01
                • 2015-12-18
                • 1970-01-01
                相关资源
                最近更新 更多