重新启动客户端服务器应用程序时如何解决“地址已在使用中”?

问题描述

我有一个用C编写的客户端-服务器应用程序。一个硬编码的端口号用于客户端和服务器之间的套接字通信。每次运行该应用程序后,鉴于服务器存在后套接字进入TIME_WAIT状态,我必须等待一段时间才能再次重新启动它。如果我不等,服务器的新运行将显示错误消息“地址已在使用中”。我的代码基于Beej's Guide to Network Programming。这是在服务器端进行的呼叫顺序:

sock = socket(...);
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&OK,sizeof(int)); //OK=1
bind(sock,...);
listen(sock,BACKLOG);
while(someCondition) {
    select(sock+1,&readFDs,NULL,&timeout);
    newSock = accept(sock,...);
    recv(newSock,...);
    send(newSock,...); // ACK
    close(newSock);
}
close(sock);
return 0;

在客户端,建立连接以将请求发送到服务器,然后在收到服务器的响应后立即关闭调用顺序如下:

clientSock = socket(...);
connect(clientSock,...);
send(clientSock,...);
recv(clientSock,...);
close(clientSock);

是否有一种无需等待即可立即重新启动服务器的方法? 是否可以避免服务器创建的套接字进入TIME_WAIT状态? 是否可以为每次运行选择一个不同的端口?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)