当前位置: 技术问答>linux和unix
socket通信bind error:Address already in use
来源: 互联网 发布时间:2017-01-27
本文导语: socket tcp 通信 绑定了ip 和 port 正常顺序 客户端发起socket 服务端收到socket的时候 没有问题 但是有时候,顺序错误,就导致程序死了 再起运行程序的时候 发现bind error:Address already in use 等了5 -10分钟再试 也...
socket tcp 通信
绑定了ip 和 port
正常顺序 客户端发起socket 服务端收到socket的时候 没有问题
但是有时候,顺序错误,就导致程序死了
再起运行程序的时候 发现bind error:Address already in use
等了5 -10分钟再试 也不行
禁用网卡再启动 也不行
重新开机倒是好了
想知道 有没有查看 是哪个连接Address already in use
然后手动终止这个呢
总不能每次程序死掉 就开机吧
比如netstat命令什么的
绑定了ip 和 port
正常顺序 客户端发起socket 服务端收到socket的时候 没有问题
但是有时候,顺序错误,就导致程序死了
再起运行程序的时候 发现bind error:Address already in use
等了5 -10分钟再试 也不行
禁用网卡再启动 也不行
重新开机倒是好了
想知道 有没有查看 是哪个连接Address already in use
然后手动终止这个呢
总不能每次程序死掉 就开机吧
比如netstat命令什么的
|
在服务端bind or listen前
unsigned int value = 0x1;
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,(void *)&value,sizeof(value));
unsigned int value = 0x1;
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,(void *)&value,sizeof(value));
|
TIME_WAIT引起的。
可以用setsockopt来设置。
http://blog.csdn.net/hairetz/archive/2009/04/16/4083389.aspx
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:
BOOL bReuseaddr=TRUE;
setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));
2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历
TIME_WAIT的过程:
BOOL bDontLinger = FALSE;
setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL));
可以用setsockopt来设置。
http://blog.csdn.net/hairetz/archive/2009/04/16/4083389.aspx
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:
BOOL bReuseaddr=TRUE;
setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));
2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历
TIME_WAIT的过程:
BOOL bDontLinger = FALSE;
setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL));