Мы обслуживаем порт на локальном хосте и хотим проверить в другом процессе, доступен ли порт. Из-за ошибки в нашем коде он на самом деле пытается подключиться к IP 0.0.0.0:<port>
, и по какой-то причине это удается - как доказывает strace:
[...]
connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[...]
Что это означает? Почему это работает?
networking
tcp
strace
erikbwork
источник
источник
Ответы:
0.0.0.0 в качестве целевого адреса по-разному относится к не маршрутизируемому хосту или «этому хосту» . На практике подключение к 0.0.0.0 эквивалентно подключению к localhost. (Строго говоря, он недействителен как адрес назначения, только как адрес источника, но практика не соответствует теории.)
При связывании «этот хост» расширяется до «любого адреса на этом хосте» - поэтому приложения обычно принимают соединения, привязываясь к 0.0.0.0, что означает, что они получат пакеты, адресованные любому IPv4-адресу в системе.
источник