日期:2014-05-16  浏览次数:21157 次

socket通信bind error:Address already in use
socket tcp 通信
绑定了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));
------解决方案--------------------
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));