已经在使用的地址... C中的套接字

时间:2013-04-03 12:57:53

标签: c++ linux sockets

此问题之前已被问过,但我似乎无法理解它,因为我见过的所有问题的细节都让我失望......

我一直遇到问题,当我创建一个TCP套接字服务器时,端口变得无法使用X大量时间如果我建立连接(如果没有与客户端建立连接,我可以在终止后重新运行程序没有问题)。这显然与TCP在丢弃连接之前需要的超时有关。

我在服务器和客户端的套接字上都使用close(socketfd)而没有占用...有没有办法使套接字在成功终止后立即可用(如在fd中关闭调用)必须等待似乎永远的事情或重新启动机器?

2 个答案:

答案 0 :(得分:5)

是的,相关的套接字选项称为SO_REUSEADDR。您可以使用setsockopt()来设置套接字选项。

您通常不应该关闭服务器的主套接字,而是应该使用accept()创建每个客户端套接字,这可以在客户端断开连接时关闭。

答案 1 :(得分:1)

套接字在关闭后可以暂停在TIME_WAIT状态一段时间。为了能够在此状态集中重用套接字SO_REUSEADDR