我有一个在Linux上运行的C ++开发的应用程序。此应用程序在启动时打开某些TCP套接字。但是,如果在连接处于已建立状态时此应用程序被终止,则服务器端套接字仍会保持关闭状态(TIME_WAIT)一段时间。
由于我的应用程序不经意地重新启动,因此无法绑定从前一次崩溃中关闭几乎60秒的端口。
是否有任何系统调用可以强行关闭所有打开/悬空插座?所以在我去绑定之前,我可以确保所有打开/悬挂的套接字都关闭,我的绑定不会失败。
感谢。
答案 0 :(得分:3)
您可以使用SO_REUSEADDR
设置setsockopt
。然后你就可以直接绑定了。
int optval = 1;
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));