Nous desservons un port sur localhost et souhaitons enregistrer un autre processus si le port est disponible. En raison d'un bogue dans notre code, il essaie en réalité 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?
networking
tcp
strace
erikbwork
la source
la source
Réponses:
0.0.0.0 en tant qu'adresse cible fait référence à un hôte non routable ou à «cet hôte» . En pratique, se connecter à 0.0.0.0 équivaut à se connecter à localhost. (À proprement parler, cette adresse n'est pas valide en tant qu'adresse de destination, mais uniquement en tant qu'adresse source, mais la pratique ne correspond pas à la théorie.)
Lors de la liaison, «cet hôte» se développe en «toute 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.
la source