c - 如何强制关闭打开/悬空的套接字?

标签 c linux sockets

我有一个用 C++ 开发的应用程序,在 Linux 上运行。该应用程序在启动时打开某些 TCP 套接字。但是,如果在连接处于已建立状态时终止该应用程序,则服务器端套接字仍会保持关闭状态 (TIME_WAIT) 片刻。

由于我的应用程序立即重新启动,因此无法绑定(bind)端口,从上次崩溃开始需要近 60 秒才能关闭。

是否有任何系统调用可以强制关闭所有打开/悬空的套接字?因此,在进行绑定(bind)之前,我可以确保所有打开/悬空套接字都已关闭,并且我的绑定(bind)不会失败。

谢谢。

最佳答案

您可以使用setsockopt设置SO_REUSEADDR。然后您就可以立即绑定(bind)。

int optval = 1;
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));

关于c - 如何强制关闭打开/悬空的套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8939130/

相关文章:

c - C 中的指针递归

c - 将 csv 文件读入结构数组

c - 子进程是否可以获取其兄弟进程的 PID?

linux - shell 脚本 (AIX) : Extracting OS and browser information from user agent string

c - 读取/接收线程安全 (MSG_PEEK)

linux - 为什么 gethostbyname 和 gethostbyaddr 被认为已过时?

c++ - 由于 linux 中的 HRESULT 、 LARGE_INTEGER 和 DWORD 而出错

linux - LINUX 文本脚本中的条件散列

linux - 无法连接到 wpa_supplicant : wlan0 - re-trying

linux - 如何观察 Linux 上进程的 TCP 连接变量?