Вы указываете INADDR_ANY
, а не конкретный IP-адрес, поэтому он привязывается к шаблону (все интерфейсы) 0.0.0.0
.Таким образом, когда вы звоните getsockname()
, вы получаете ответ.
Если вы указали 0.0.0.0
в качестве IP-адреса, а не INADDR_ANY
, вы получите то же самое поведение;Вы будете привязаны ко всем сетевым интерфейсам на машине.
Например, допустим, у вас есть только один сетевой интерфейс с назначенным ему IP 192.168.1.12
.У вас также есть петля по умолчанию - 127.0.0.1
Использование 0.0.0.0
или INADDR_ANY
означает, что вы будете связаны с обоими этими адресами, а не с конкретным.Вы сможете подключиться к вашему процессу через любой IP.
Если бы вы привязались к определенному IP-адресу, а не к INADDR_ANY
, ваш процесс прослушивал бы только этот IP-адрес, и вы получили бы этот конкретный IP-адрес с помощью getsockname()
.