在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中,我可以设置这些套接字选项吗?
答案 0 :(得分:3)
给出的链接实际上并没有告诉你 如何使用JNA来实现它。花了一段时间在SO上寻找解决方案,我写了自己的库。你可以找到它here。
答案 1 :(得分:0)
Netty的最新版本允许您使用epoll类型通道并设置Linux本机套接字选项,例如您提到的那些。
有关详细信息,请参阅documentation of EpollChannelOption。
答案 2 :(得分:0)
看来Java 11通过new fields in the ExtendedSocketOptions
class支持此功能。可以将它们传递给setOption
或java.net.Socket
上的java.nio.channels.SocketChannel
方法。
请注意,我实际上并未尝试使用此功能。文档明确指出它们是特定于平台的,因此您需要测试它们在您关心的平台上实际完成了您想要的工作。