connect() & getsockname()
От: Vladimir Davydov Украина  
Дата: 27.02.03 20:58
Оценка:
Наткнулся на странное различие в работе с сокетами в Windows 98 по сравнению с другими операционками.
Обычно, в Windows 2000/XP и Linux, если SOCK_DGRAM-сокет при'bind'ен на INADDR_ANY, то после выполнения
функции connect(), он автоматически пере'bind'ивается на тот исходящий IP-адрес, с которого должно идти обращение на адрес назначения, заданный с connect().
То есть, до вызова connect() функция getsockname() возвращает 0.0.0.0, а после connect() функция getsockname() возвращает уже конкретный IP-адрес, причем уже тот, с которого реально будет идти обращение с заданному destination-хосту, согласно текущей таблице марщрутизации.
Так оно работает в Windows 2000/XP, в Linux и FreeBSD. И я этим пользуюсь, чтобы заранее определить исходящий IP-адрес, с которого пойдет UDP-пакет.
А в Windows 98 функция getsockname() даже после успешного connect() продолжает возвращать 0.0.0.0.
Может, кто-нибудь уже наступал на эти грабли. Подскажите, pls, как это лечится ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.