Question

Lors de la création d'un socket en Java:

new Socket(host, port);

Le constructeur Socket essaiera de se connecter à hôte: port avant de retourner. Sous Windows, cela échoue presque immédiatement pour les hôtes inaccessibles, mais sous Linux, l’exécution du Socket peut prendre jusqu'à 5 minutes.

Je suis conscient que si j'ai le contrôle sur la création des sockets, je peux faire:

Socket s = new Socket();
s.bind(..);
s.connect(.., timeout);

mais je préférerais que le système d'exploitation utilise une valeur par défaut raisonnable. Est-il possible de modifier ce paramètre sous Linux?

Merci

Était-ce utile?

La solution

Je pense que vous voulez /proc/sys/net/ipv4/tcp_syn_retries. La valeur par défaut est généralement 5 ou 6, ce qui prend environ 3 minutes.

Notez qu’ils s’appliquent à l’ensemble du système.

Autres conseils

Je vous déconseille de modifier les paramètres du système d'exploitation car cela pourrait affecter d'autres applications de manière inattendue. La méthode Socket.setSoTimeout() peut également vous aider.

C’est BTW pas tout à fait correct, que Linux et Windows se comportent ici différemment. Outre les tentatives SYN initiales (configurables sous Linux et Windows), l’état du voisin, ainsi que les autres routeurs envoyant des paquets RST, jouent également un rôle.

Si une tentative de connexion sur Windows échoue immédiatement, il est probable que le routeur a été mis à niveau par un routeur ou que le voisin a été reconnu inaccessible au niveau ARP. Essayez la commande arp -a -v sous Windows pour voir les hôtes inaccessibles, qui sont rapidement rejetés.

Sous Linux, vous utiliseriez ip neigh pour répertorier l'état d'accessibilité des stations de votre réseau local.

D'après ce que j'ai compris, cela dépend du délai d'attente TCP / IP par défaut du système (240 secondes par défaut?) ... une option consiste à essayer de les modifier, mais cela pourrait affecter tout autre programme de la même machine qui repose sur la valeur de délai d'attente. Dans ce cas, il pourrait être plus sûr de simplement baisser le & Quot; timeout & "; valeur dans votre appel Java connect (), à la place.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top