windows-动态端口问题

最近在对接rest时发现一个比较奇怪的问题,在Windows Web Server 2008上,用rest客户端发送数据时报错:
bind: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
经查,发现是因为频繁的打开关闭客户端的动态端口造成的。查找资料最后总结了一些解决方案,目前看是有效的。
1、修改动态端口的范围
首先看下服务器的动态端口设置情况:
netsh int ipv4 show dynamicport tcp
一般如下:
在这里插入图片描述
表示动态端口是从49152开始,一共有16384个
我们修改一下动态端口的范围和个数:
netsh int ipv4 set dynamicport tcp start=30000 num=20000
表示修改动态端口从30000起,一共有20000个。这时候需要注意的是,尽可能避开自己服务使用的端口,做一下简单的规划。

2、修改tcp的TimedWaitDelay时间
打开注册表:HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters, 未手动修改时是默认的120s。在Parameters的右边空白处下右键新建一个项,如图:
在这里插入图片描述
key值填写TcpTimedWaitDelay,value值选十进制,写10。表示最长wait时延为10s。
在这里插入图片描述
上面第一步我们已经修改了端口的动态范围,就没必要在注册表中设置,如果要是还想设置也可以。和修改TcpTimedWaitDelay一样,建一个key为MaxUserPort的项,value值填写50000,表示1024~50000之间的端口为动态端口。
操作第2步需要重启机器

3、连接池
确认自己的程序中对http客户端的使用,最好是有一个连接池,使用已经存在的链接,这种情况需要结合实际问题解决

参考:
https://blog.csdn.net/zl325118/article/details/87073474
https://support.microsoft.com/en-us/help/929851/the-default-dynamic-port-range-for-tcp-ip-has-changed-in-windows-vista
https://support.cerberusftp.com/hc/en-us/articles/202639489-Why-do-I-see-An-operation-on-a-socket-could-not-be-performed-because-the-system-lacked-sufficient-buffer-space-or-because-a-queue-was-full-error-mesasges-in-the-log-file-

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值