转载自:[url=http://www.51testing.com/?uid-66821-action-viewspace-itemid-147278]badguy的个人空间[/url]
客户端connect服务器,执行一定时间后,接口返回-99的错误。
查看错误信息: OS error code 99: Cannot assign requested address
猜想端口被用光的原因,网络搜索得到一个解释:客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端口号,所以新的连接没办法绑定端口,即 “Cannot assign requested address”。
通过netstat,的确看到很多TIME_WAIT状态的连接。
因为是调用API,所以无法对连接进行opt设置,只能通过设置系统配置得以解决。
解决办法:
执行命令修改如下2个内核参数:
[code]
// 开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置不起作用。
# sysctl -w net.ipv4.tcp_timestamps=1
// 表示开启TCP连接中TIME-WAIT sockets的快速回收。
# sysctl -w net.ipv4.tcp_tw_recycle=1
[/code]
关于 TIME_WAIT 状态,可参看这篇文章:[url=http://soli.iteye.com/blog/2112071]TCP/IP状态图的TIME_WAIT作用[/url]
客户端connect服务器,执行一定时间后,接口返回-99的错误。
查看错误信息: OS error code 99: Cannot assign requested address
猜想端口被用光的原因,网络搜索得到一个解释:客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端口号,所以新的连接没办法绑定端口,即 “Cannot assign requested address”。
通过netstat,的确看到很多TIME_WAIT状态的连接。
因为是调用API,所以无法对连接进行opt设置,只能通过设置系统配置得以解决。
解决办法:
执行命令修改如下2个内核参数:
[code]
// 开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置不起作用。
# sysctl -w net.ipv4.tcp_timestamps=1
// 表示开启TCP连接中TIME-WAIT sockets的快速回收。
# sysctl -w net.ipv4.tcp_tw_recycle=1
[/code]
关于 TIME_WAIT 状态,可参看这篇文章:[url=http://soli.iteye.com/blog/2112071]TCP/IP状态图的TIME_WAIT作用[/url]