由于TCP的TIME_WAIT造成的bind error:Address already in use;
参考两篇文章:
linux下socket编程端口问题:
http://blog.csdn.net/xl_xunzhao/archive/2008/10/23/3130037.aspx
linux套接字编程的5个隐患:
http://www.ibm.com/developerworks/cn/linux/l-sockpit/
主要是由于TCP的TIME_WAIT状态引起的,当一端中断时,必须等待2个MSL超时才能收回端口;
一旦TCP的连接服务器异常退出,没有释放端口号,就会出现这中情况;
可以用setsockopt函数设置端口号可以重用,代码表示为:
代码
1 int listenfd, connfd, ret, on;
2 on = 1;
3 listenfd = Socket(AF_INET, SOCK_STREAM, 0);
4 ret = setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
5
6
7
8 bzero(&servaddr, sizeof(servaddr));
9


浙公网安备 33010602011771号