编辑:tl;博士:
不要用错误的选项打开套接字,它不太可能工作!
原始问题:
我正在使用一个没有干净关闭机制的程序,它只是依赖于终止它而被杀死。
它打开一个套接字如下:
(void) setsockopt(h, SOL_SOCKET, (SO_KEEPALIVE | SO_REUSEADDR), (int *) & optval, sizeof( optval ));
重用地址选项确实有效,因为最终套接字在程序死后被释放。最终是从几秒钟到一刻钟的任何事情。
由于我需要定期重启此程序,这非常繁琐。正确地使程序化,这将是一项非常重要的工作,但我想知道我是否可以做更多的本地工作来提前释放套接字?
答案 0 :(得分:6)
套接字选项不是位,因此不能像SO_KEEPALIVE | SO_REUSEADDR
那样。为了迂腐,SO_KEEPALIVE | SO_REUSEADDR
会产生另一个套接字选项SO_NO_CHECK
。
您没有注意到这个错误,因为您没有检查setsockopt
的返回值。现在你知道为什么忽略返回值被认为是不好的做法。