При вызове listen()
на сокете сервера привязка к INADDR_ANY
свяжет сокет со всеми доступными локальными IP-адресами на машине.Это позволяет клиенту подключаться к любому из IP-адресов сервера.Если вместо этого сервер использует inet_addr()
, это будет единственный IP-адрес, на котором сервер может принимать клиентские подключения.
При вызове connect()
в клиентском сокете он должен указать конкретный IP-адрес, который серверслушает дальше.Если клиент хочет выбрать, к какому локальному IP он привязывается для своей конечной точки соединения, он может вызвать bind()
сам по себе перед вызовом connect()
.Если клиент не связывается с конкретным IP-адресом или связывается с INADDR_ANY
, сокет будет использовать первый обнаруженный им IP-адрес, к которому имеется доступный маршрут к IP-адресу сервера, к которому выполняется подключение.
После подключениябыло установлено, что обе стороны могут в любое время вызвать getsockname()
и getpeername()
на своих соответствующих конечных точках сокетов, чтобы выяснить, какие IP-адреса (и порты) фактически используются для этого соединения.