【发布时间】:2014-04-23 17:58:32
【问题描述】:
在 C/Linux 中,很容易为每个 KEEPALIVE tcp 连接独立设置不同的套接字选项值。
TCP_KEEPCNT (Linux 2.4 起) TCP 在断开连接之前应发送的最大保活探测数。此选项不应在旨在可移植的代码中使用。
TCP_KEEPIDLE (Linux 2.4 起) 如果已在此套接字上设置了套接字选项 SO_KEEPALIVE,则在 TCP 开始发送 keepalive 探测之前连接需要保持空闲的时间(以秒为单位)。 此选项不应在旨在可移植的代码中使用。
TCP_KEEPINTVL(从 Linux 2.4 开始) 各个保活探测之间的时间(以秒为单位)。此选项不应在旨在可移植的代码中使用。
在netty或java中,如何设置socket的三个socket选项?我知道没有可移植的方法来解决它,但只有在 Linux 中,我可以设置那些套接字选项吗?
【问题讨论】:
-
正如您在上面的文档中提到的,这些选项“[...] 不应在旨在可移植的代码中使用”。如果你想使用这些,你需要使用 JNI(或更好的 JNA)并实现你自己的
Socket/SocketFactory -
谢谢大家。需要使用JNA来实现。
-
对于 C++,在这篇文章中有描述:Socket keepalive not working。
标签: java linux sockets tcp netty