此问题之前已被问过,但我似乎无法理解它,因为我见过的所有问题的细节都让我失望......
我一直遇到问题,当我创建一个TCP套接字服务器时,端口变得无法使用X大量时间如果我建立连接(如果没有与客户端建立连接,我可以在终止后重新运行程序没有问题)。这显然与TCP在丢弃连接之前需要的超时有关。
我在服务器和客户端的套接字上都使用close(socketfd)而没有占用...有没有办法使套接字在成功终止后立即可用(如在fd中关闭调用)必须等待似乎永远的事情或重新启动机器?
答案 0 :(得分:5)
是的,相关的套接字选项称为SO_REUSEADDR
。您可以使用setsockopt()
来设置套接字选项。
您通常不应该关闭服务器的主套接字,而是应该使用accept()
创建每个客户端套接字,这可以在客户端断开连接时关闭。
答案 1 :(得分:1)
套接字在关闭后可以暂停在TIME_WAIT状态一段时间。为了能够在此状态集中重用套接字SO_REUSEADDR