Cannot assign requested address
2012-03-22 09:48
225 查看
场景:使用libcurl 向本机的nginx 发请求,每隔一段时间,会出“Couldn't connect to server”,此时使用telnet 也会有错,Couldn't connect to server,同时观察netstat 发现很多TIME_WAIT。
分析:客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端口号,所以新的连接没办法绑定端口,即“Cannot assign requested address”
解决:
1. 在程序中设置立即关闭不经历TIME_WAIT,以重用端口
int bReuseaddr=1;
setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(int));
2. 修改内核参数
vi /etc/sysctl.conf 在末尾添加以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
使配置生效: /sbin/sysctl -p
分析:客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端口号,所以新的连接没办法绑定端口,即“Cannot assign requested address”
解决:
1. 在程序中设置立即关闭不经历TIME_WAIT,以重用端口
int bReuseaddr=1;
setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(int));
2. 修改内核参数
vi /etc/sysctl.conf 在末尾添加以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
使配置生效: /sbin/sysctl -p
相关文章推荐
- SIOCSIFFLAGS: Cannot assign requested address
- 出现Cannot assign requested address: JVM_Bind
- NameNode启动报错:Cannot assign requested address
- rh436 - 基于rhel6.2的apache集群排错 - Cannot assign requested address: make_sock: could not bind to address
- java.net.BindException: Cannot assign requested address: Cannot bind问题解决
- tomcat java.net.BindException: Cannot assign requested address
- 记一次tomcat启动时的问题:Tomcat Cannot assign requested address: JVM_Bind 非端口占用冲突
- java.net.BindException: Cannot assign requested address
- hadoop常见错误-hadoop cannot assign requested address
- Cannot assign requested address解决办法
- NoRouteToHostException: Cannot assign requested address 出现原因及解决方案
- time_wait太多导致[error] (99)Cannot assign requested address: proxy
- Cannot assign requested address的解决办法
- java.net.BindException: Cannot assign requested address: JVM_Bind
- php连接memcahed出现Cannot assign requested address (99)的解决方法
- Cannot assign requested address的解决办法
- java.net.NoRouteToHostException: Cannot assign requested address 解决
- linux--异常--NoRouteToHostException: Cannot assign requested address有关问题
- Tomcat启动报错:java.net.BindException: Cannot assign requested address: JVM_Bind
- Tomcat的Cannot assign requested address: JVM_Bind:8080错误