地址已在使用中... C 中的套接字
Posted
技术标签:
【中文标题】地址已在使用中... C 中的套接字【英文标题】:Address already in use... sockets in C 【发布时间】:2013-04-03 12:57:52 【问题描述】:以前有人问过这个问题,但我似乎无法理解它,因为我见过的所有问题的小细节都让我感到厌烦......
我一直遇到问题,当我创建 TCP 套接字服务器时,如果我建立连接,端口在 X 时间内无法使用(如果未与客户端建立连接,我可以在终止后重新运行程序没有问题)。这显然与 TCP 在断开连接之前需要的超时有关。
我在服务器和客户端的套接字上都使用了 close(socketfd) 没有占上风...有没有办法让套接字在成功终止后立即可用(如在 fd 上调用关闭)而不必须等待看似永远的事情还是重新启动机器?
【问题讨论】:
您使用哪个 TCP 套接字库?我的猜测是 TCP 超时可以根据您的需要进行调整。 我使用了 linux 的 #include是的,相关的套接字选项称为SO_REUSEADDR
。您使用setsockopt()
设置套接字选项。
您通常不应该关闭服务器的主套接字,而是应该使用accept()
创建每个客户端的套接字,当客户端断开连接时可以关闭该套接字。
【讨论】:
我应该把它放在哪里?我用这个吗:“setsockopt(SO_REUSEADDR);”【参考方案2】:套接字在关闭后可以停留在 TIME_WAIT 状态一段时间。为了能够在此状态下重用套接字,请设置SO_REUSEADDR
【讨论】:
以上是关于地址已在使用中... C 中的套接字的主要内容,如果未能解决你的问题,请参考以下文章
错误:在将套接字与地址绑定时地址已在使用中,但端口号由“netstat”免费显示
“java.net.BindException:地址已在使用中”尝试为负载测试进行快速套接字创建和销毁时