Путаница в вызове привязки в программировании сокетов

я изучал программирование сокетов в unix, используя c/c++. Меня смущает один вызов функции bind(params..). На самом деле он принимает адресную структуру «sockaddr_in», и мы можем создать структуру следующим образом.

sockaddr_in.*** = somthing..
sockaddr_in..s_addr   htonl(INADDR_ANY)

**Passing INADDR_ANY will alow to bind all local addresses**

Мой вопрос: зачем нам нужно использовать «INADDR_ANY»? Насколько мне известно, каждая машина может иметь только один уникальный IP-адрес. Таким образом, с машиной связан только один адрес. Вызов привязки должен напрямую привязывать сокет к единственному доступному адресу.

Пожалуйста, объясните, что это за разные сценарии и почему это так?


person Tarun    schedule 10.06.2010    source источник


Ответы (3)


Машина обычно имеет IP-адрес для каждого подключенного сетевого интерфейса плюс 127.0.0.1 для локального хоста (петля). Например, ноутбук может быть подключен к беспроводной сети как 10.0.1.25, а также к проводной сети как 10.0.2.4. Серверы часто имеют интерфейс к внутренней сети, а также к сети общего пользования.

person Justin K    schedule 10.06.2010

Машина может иметь более одного IP-адреса либо из-за наличия нескольких сетевых карт, либо из-за программного обеспечения. INADDR_ANY позволяет привязать сокет ко всем IP-адресам машины.

person JSBձոգչ    schedule 10.06.2010

Не правда. Большинство машин являются многосетевыми, что означает, что они имеют более одного IP-адреса.

Например, сетевой адрес и 127.0.0.1.

person Pavel Radzivilovsky    schedule 10.06.2010