我有一个用 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/