3

编辑:tl;博士:

不要使用错误的选项打开套接字,这不太可能起作用!

原始问题:

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

它打开一个套接字,如下所示:

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

重用地址选项似乎确实有效,因为最终套接字在程序终止后被释放。最终从几秒钟到一分钟不等。

这很乏味,因为我需要定期重新启动这个程序。使程序正确终止将是一项非常艰巨的工作,但是我想知道是否还有更多本地操作可以更早地释放套接字?

4

1 回答 1

5

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

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

于 2013-09-17T15:44:31.337 回答