程序被杀时,Linux套接字释放得太慢

Ste*_*fan 3 c sockets linux

编辑:tl;博士:

不要用错误的选项打开插座,它不太可能工作!

原始问题:

我正在使用一个没有干净关闭机制的程序,它只是依赖于终止它而被杀死.

它打开一个套接字如下:

(void) setsockopt(h, SOL_SOCKET, (SO_KEEPALIVE | SO_REUSEADDR), (int *) & optval, sizeof( optval ));
Run Code Online (Sandbox Code Playgroud)

重用地址选项似乎确实有效,因为程序最终会在程序死后释放.最终成为从几秒钟到一刻钟的任何东西.

这非常繁琐,因为我需要定期重启这个程序.使程序正确地发挥作用将是一项非常重要的工作,但我想知道我是否可以做更多的本地工作来提前释放套接字?

Max*_*kin 5

套接字选项不是位,因此不能或类似SO_KEEPALIVE | SO_REUSEADDR.要迂腐,SO_KEEPALIVE | SO_REUSEADDR产生另一个套接字选项SO_NO_CHECK.

您没有注意到这个错误,因为您没有检查返回值setsockopt.现在您知道为什么忽略返回值被认为是不好的做法.