Ist die Bindung an 0.0.0.0 in Java garantiert, um an alle Netzwerkschnittstellen zu binden?

8

Ich habe empirisch gefunden, dass

%Vor%

bindet an alle Netzwerkschnittstellen auf dem aktuellen Computer (statt nur an localhost - 127.0.0.1 oder den Hostnamen), aber ich konnte die Dokumentation, die besagt, dass dies garantiert ist, nicht finden.

Frage: Wo ist definiert, dass die Bindung an 0.0.0.0 in Java immer an alle Netzwerkschnittstellen bindet?

    
Thorbjørn Ravn Andersen 19.06.2012, 08:26
quelle

3 Antworten

12

Die Verwendung von 0.0.0.0 bindet nur an IPv4-fähige Schnittstellen. Wenn Sie jedoch an :: binden, sollte dies alle IPv4- und IPv6-Schnittstellen abdecken, vorausgesetzt, Ihr TCP / IP-Stack (und Java) hat IPv4-kompatible IPv6-Sockets aktiviert.

Sie müssen zum Kernel (oder den Socket-Bibliotheken, wenn Sie unter Windows sind) nach einer Erklärung von "warum" suchen. Auf meinem OS X-System erklären die man Seiten es.

Von man 4 inet :

  

Sockets können mit der lokalen Adresse INADDR_ANY erstellt werden        'Wildcard' bei eingehenden Nachrichten. Die Adresse in einem connect (2)        oder sendto (2) Aufruf kann als INADDR_ANY angegeben werden als 'dieser Host'. Das        Die Adresse INADDR_BROADCAST ist als Kurzform für die        Broadcast-Adresse im primären Netzwerk, wenn das erste Netzwerk konfiguriert wurde        unterstützt Broadcast.

Von man 4 inet6 :

  

Sockets können mit der lokalen Adresse '::' erstellt werden (was gleich ist        IPv6-Adresse 0: 0: 0: 0: 0: 0: 0: 0), um die Übereinstimmung von Wildcards bei eingehenden Nachrichten zu beeinflussen        Nachrichten.

    
mpontillo 19.06.2012, 23:00
quelle
8

Es hat nichts mit Java zu tun. 0.0.0.0 ist INADDR_ANY. Dies ist eine spezielle Adresse, die garantiert von der beliebigen Netzwerkschnittstelle über die Socket-API C empfangen wird von Java aufgerufen.

    
EJP 19.06.2012 10:14
quelle
2

Es scheint sich um eine spezielle reservierte IP-Adresse zu handeln. Dieser Link hat wahrscheinlich mehr Informationen Ist 0.0.0.0 eine gültige IP-Adresse ? . Ich vermute also, dass es in Java nicht dokumentiert ist, da es mehr mit der tatsächlichen Netzwerkspezifikation zu tun hat.

Und wie einige andere erwähnt haben, scheint es, dass es die IP-Adresse von Chuck Norris ist: D

HTH

    
Namphibian 19.06.2012 09:02
quelle

Tags und Links