Cap*_*jan 13 networking linux c sockets
如果我的 C 程序使用套接字、绑定到localhost:9025、交换一些数据、被手动杀死并重新启动,它有时会崩溃并出现以下错误:
地址已被使用。
我试图寻找“使用端口的pid”的所有SE推荐的软件都未能返回任何进程ID,所以我假设当时没有进程使用端口 9025,应该是这种情况。
尽管如此,根据我从对主题相似问题的评论中收集到的信息,在我看来,当且仅当进程使用该特定地址时,“地址”才“已在使用”。那为什么这是假的呢?
现在我假设操作系统会跟踪哪些地址正在使用,哪些没有,但情况是这样吗?如果是这样,我很乐意您告诉我如何纠正它,因为我对这个问题的最佳解决方案是“等待不确定的时间”。
编辑:我使用 Linux 5.2.2-arch1-1-ARCH x86_64
har*_*ymc 32
您可能重新启动程序的速度太快,或者程序没有关闭套接字。
即使在套接字关闭后,Linux 仍会保持连接处于不确定状态一段时间,但会阻止任何其他连接被“源地址、源端口、目标地址、目标端口”的同一个四元组接受。
解决办法是在程序中用setsockopt设置socket选项, 如下所示:
setsockopt(socket,SOL_SOCKET,SO_REUSEADDR ... )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4067 次 |
| 最近记录: |