问题描述
我有一个用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 (将#修改为@)