Comment définir les option de socket (TCP_KEEPCNT, TCP_KEEPIDLE, TCP_KEEPINTVL) en java ou netty?
En C/Linux, il est facile de définir une valeur différente au sujet de ces options de prise pour chaque KEEPALIVE connexion tcp indépendamment.
TCP_KEEPCNT (depuis Linux 2.4)
Le nombre maximum de messages keepalive envoyés par TCP avant la suppression de la connexion. Cette option ne doit pas être utilisé dans le code destinés à être portables.TCP_KEEPIDLE (depuis Linux 2.4)
Le temps (en secondes) la connexion doit rester inactive avant d'TCP commence à envoyer des keepalive sondes, si l'option de socket SO_KEEPALIVE a été mis sur ce socket.
Cette option ne doit pas être utilisé dans le code destinés à être portables.TCP_KEEPINTVL (depuis Linux 2.4)
Le temps (en secondes) entre deux messages keepalive. Cette option ne doit pas être utilisé dans le code destinés à être portables.
Dans netty ou java, comment définir les trois options de socket socket? Je sais qu'il n'est pas portable moyen de le résoudre, mais seulement sous Linux, puis-je configurer ces options de prise?
Socket
/SocketFactory
si vous souhaitez utiliser cesreportez-vous à stackoverflow.com/questions/6161437/setsockopt-in-java-programs
Merci à tous. Il est nécessaire d'utiliser JNA à mettre en œuvre.
Pour le C++, il est décrit dans ce post: Socket keepalive ne fonctionne pas.
OriginalL'auteur Yang Juven | 2014-03-18
Vous devez vous connecter pour publier un commentaire.
Le lien donné n'est pas réellement vous dire comment à utiliser JNA à mettre en œuvre. Après avoir passé un certain temps à creuser autour de sur AFIN de trouver des solutions, j'ai écrit ma propre bibliothèque. Vous pouvez le trouver ici.
OriginalL'auteur abligh
Les versions récentes de Netty vous permettre d'utiliser epoll type de canaux et de définir Linux natif options de prise, tels que ceux que vous avez mentionné.
Voir le la documentation de EpollChannelOption pour plus de détails.
OriginalL'auteur paprika
Il semble que cela est pris en charge dans Java 11, via de nouveaux champs dans le
ExtendedSocketOptions
de la classe. Ceux-ci peuvent être transmis à lasetOption
méthode surjava.net.Socket
oujava.nio.channels.SocketChannel
.Remarque je n'ai pas réellement essayé d'utiliser ce. Les docs explicitement dire que ce sont de plate-forme spécifique, de sorte que vous aurez besoin de test qu'ils font réellement ce que vous voulez sur les plates-formes que vous vous souciez.
OriginalL'auteur Lachlan