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

时间:2013-09-17 15:33:31

标签: c linux sockets

编辑:tl;博士:

不要用错误的选项打开套接字,它不太可能工作!

原始问题:

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

它打开一个套接字如下:

(void) setsockopt(h, SOL_SOCKET, (SO_KEEPALIVE | SO_REUSEADDR), (int *) & optval, sizeof( optval ));

重用地址选项确实有效,因为最终套接字在程序死后被释放。最终是从几秒钟到一刻钟的任何事情。

由于我需要定期重启此程序,这非常繁琐。正确地使程序化,这将是一项非常重要的工作,但我想知道我是否可以做更多的本地工作来提前释放套接字?

1 个答案:

答案 0 :(得分:6)

套接字选项不是位,因此不能像SO_KEEPALIVE | SO_REUSEADDR那样。为了迂腐,SO_KEEPALIVE | SO_REUSEADDR会产生另一个套接字选项SO_NO_CHECK

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