An operation on a socket could not be performed because the system lacked sufficient buffer space(由于系统缓冲区空间不足,或者因为队列已满,不能执行套接字上的操作)

清泛原创

服务端程序崩溃重启,查看日志报错:An operation on a socket could not be performed because the system lacked sufficient buffer space(由于系统缓冲区空间不足,或者因为队列已满,不能执行套接字上的操作。)


原因:建立大于5000的出口TCP连接端口导致,通常是过多的客户端连接导致的。
解决方案:配置服务器以增加最大TCP端口数,从该端口可以建立出口连接。
 

解决方案

默认的临时 TCP 端口的最大数量是 5000"适用于"一节中包含的产品中。在这些产品中添加一个新参数。若要增加的最大临时端口数,请执行以下步骤:

  1. 启动注册表编辑器。
  2. 在注册表中,找到以下注册表子项,然后单击参数
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  3. 编辑菜单上,单击新建,然后添加以下注册表项:
    值的名称: MaxUserPort
    值类型: 双字节
    值数据: 65534
    有效范围: 5000-65534 (十进制)
    默认值: 0x1388 (5000 十进制)
    说明: 此参数控制的程序从系统请求任何可用的用户端口时所使用的最大端口号。通常情况下,临时 (短暂) 端口 1024年的值和含 5000 之间分配。之后发布的安全公告 MS08-037,Windows Server 2003 的行为已更改,以便更好地匹配,Windows Server 2008 和 Windows Vista。有关 Microsoft 安全公告 MS08-037 的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    951746 MS08-037: Windows Server 2008 中,Windows Server 2003 和 Windows 2000 服务器 (DNS 服务器端) 中的 DNS 安全更新的说明: 2008 年 7 月 8 日
    951748 MS08-037: Windows Server 2003 中,在 Windows XP 和 Windows 2000 服务器 (客户端) 中的 DNS 安全更新的说明: 2008 年 7 月 8 日
    953230 MS08-037: 在 DNS 中的漏洞可能允许欺骗
  4. 退出注册表编辑器,然后重新启动计算机。

注意:一个附加的 TCPTimedWaitDelay 注册表参数确定多长时间关闭的端口将等待,直到关闭的端口可以重复使用。

 

参考:https://support.microsoft.com/zh-cn/help/196271/when-you-try-to-connect-from-tcp-ports-greater-than-5000-you-receive-t

分享到:
评论加载中,请稍后...
创APP如搭积木 - 创意无限,梦想即时!
回到顶部