web-dev-qa-db-fra.com

La connexion à IP 0.0.0.0 réussit. Comment? Pourquoi?

Nous servons un port sur localhost et voulons vérifier dans un autre processus si le port est disponible. En raison d'un bogue dans notre code, il essaie actuellement de se connecter à l'IP 0.0.0.0:<port>, et pour une raison quelconque, il réussit - comme le prouve strace:

[...]
connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[...]

Qu'est-ce que ça veut dire? Pourquoi ça marche?

41
erikbwork

0.0.0.0 en tant qu'adresse cible se réfère diversement à un hôte non routable ou à "cet hôte" . En pratique, se connecter à 0.0.0.0 équivaut à se connecter à localhost. (Strictement parlant, ce n'est pas valide comme adresse de destination, seulement comme adresse source, mais la pratique ne correspond pas à la théorie.)

Lors de la liaison, "cet hôte" s'étend à "n'importe quelle adresse sur cet hôte" - les applications acceptent donc généralement les connexions en se liant à 0.0.0.0, ce qui signifie qu'elles recevront des paquets adressés à n'importe quelle adresse IPv4 du système.

69
Stephen Kitt