地址已在使用中... 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.. 我看到一堆帖子说要使用它,但没有人说如何:\ 基本上:int optval = 1; setsockopt(yoursocket,SOL_SOCKET,SO_REUSEADDR,&optval,sizeof(optval));更多详情可细阅documentation 我应该把这个放在哪里?在哪里? 【参考方案1】:

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

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

【讨论】:

我应该把它放在哪里?我用这个吗:“setsockopt(SO_REUSEADDR);”【参考方案2】:

套接字在关闭后可以停留在 TIME_WAIT 状态一段时间。为了能够在此状态下重用套接字,请设置SO_REUSEADDR

【讨论】:

以上是关于地址已在使用中... C 中的套接字的主要内容,如果未能解决你的问题,请参考以下文章

Python:绑定套接字:“地址已在使用中”

错误:在将套接字与地址绑定时地址已在使用中,但端口号由“netstat”免费显示

“java.net.BindException:地址已在使用中”尝试为负载测试进行快速套接字创建和销毁时

Errno 98(地址已在使用中)Python Opencv

c中的数据报套接字。看起来父进程永远不会绑定

Python [Errno 98] 地址已在使用中