如何在java或netty中设置套接字选项(TCP_KEEPCNT,TCP_KEEPIDLE,TCP_KEEPINTVL)?

时间:2014-03-18 07:28:38

标签: java linux sockets tcp netty

在C / Linux中,很容易为每个 KEEPALIVE tcp连接独立设置不同的套接字选项值。

  

TCP_KEEPCNT(自Linux 2.4起)       丢弃连接之前TCP应发送的最大keepalive探测数。此选项不应用于可移植的代码中。

     

TCP_KEEPIDLE(自Linux 2.4起)       如果在此套接字上设置了套接字选项SO_KEEPALIVE,则在TCP开始发送keepalive探测之前,连接需要保持空闲的时间(以秒为单位)。       此选项不应用于可移植的代码中。

     

TCP_KEEPINTVL(自Linux 2.4起)       各个keepalive探测器之间的时间(以秒为单位)。此选项不应用于可移植的代码中。

在netty或java中,如何为socket设置三个套接字选项?我知道没有可移植的方法来解决它,但只有在Linux中,我可以设置这些套接字选项吗?

3 个答案:

答案 0 :(得分:3)

给出的链接实际上并没有告诉你 如何使用JNA来实现它。花了一段时间在SO上寻找解决方案,我写了自己的库。你可以找到它here

答案 1 :(得分:0)

Netty的最新版本允许您使用epoll类型通道并设置Linux本机套接字选项,例如您提到的那些。

有关详细信息,请参阅documentation of EpollChannelOption

答案 2 :(得分:0)

看来Java 11通过new fields in the ExtendedSocketOptions class支持此功能。可以将它们传递给setOptionjava.net.Socket上的java.nio.channels.SocketChannel方法。

请注意,我实际上并未尝试使用此功能。文档明确指出它们是特定于平台的,因此您需要测试它们在您关心的平台上实际完成了您想要的工作。