2010-06-10 2 views
2

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

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

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

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

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

ответ

0

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

0

Неверно. Большинство машин Multi-Homed, это означает, что у них более одного IP-адреса.

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

1

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