TCP连接因某种原因忽然断开之后再短时间重连会提示端口占用;
再一次链接的bind()中,提示WSAEADDRINUSE(错误代码):端口已在使用中,说明上次链接的端口还没有得到释放;
解决方法,在建立TCP链接的时候,使用setsockopt():
...
...
bind(fd, (struct sockaddr *)&sa_in, sizeof(sa_in));
int opt= 1;
ret= setsockopt(fd,SOL_SOCKET,SO_REUSEADDR, &opt, sizeof(opt));
...
...
setsockopt()函数,还可以设置套接的超时:
...
struct timeval timeout = {5,0};
setsockopt(fd, SOL_SOCKET,SO_SNDTIMEO, (char *)&timeout, sizeof(struct timeval));
setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(struct timeval));
...