Obsługujemy port na localhost i chcemy sprawdzić w innym procesie, jeśli port jest dostępny. Z powodu błędu w naszym kodzie próbuje on połączyć się z adresem IP 0.0.0.0:<port>
iz jakiegoś powodu udaje się - jak pokazuje strace:
[...]
connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[...]
Co to znaczy? Dlaczego to działa?
networking
tcp
strace
erikbwork
źródło
źródło
Odpowiedzi:
0.0.0.0 jako adres docelowy w różny sposób odnosi się do hosta bez routingu lub do „tego hosta” . W praktyce połączenie z 0.0.0.0 jest równoznaczne z połączeniem z localhost. (Ściśle mówiąc, nie jest poprawny jako adres docelowy, tylko jako adres źródłowy, ale praktyka nie pasuje do teorii.)
Podczas wiązania „ten host” rozwija się do „dowolnego adresu na tym hoście” - więc aplikacje zazwyczaj akceptują połączenia przez powiązanie z 0.0.0.0, co oznacza, że będą otrzymywać pakiety adresowane na dowolny adres IPv4 w systemie.
źródło