2015-01-20 8 views
0

Я пытался понять основную идею UDP перфорирования, и у меня возникают проблемы понимания разницы между следующими двумя гнездовыми привязками:Привязка UDP сокета подстановочных хостов в Рубине

sock = UDPSocket.new 
sock.bind('', port) 

и

sock = UDPSocket.new 
sock.bind('0.0.0.0', port) 

Раньше я думал, что с помощью «» или «0.0.0.0» сделал то же самое - разрешить сокет для прослушивания на любом сетевом интерфейсе - но так как код не работал с ними взаимозамену я должен что-то не хватает.

Для начального «удара» датаграмма отправляется из сокета, привязанного к «», который затем закрывается и фактическая связь с удаленным хостом выполняется через сокет, привязанный к 0.0.0.0. Я знаю, что 0.0.0.0 обычно ссылается на маршрут по умолчанию, но я не могу понять значение этого в этой ситуации. Связано ли сокет с 0.0.0.0 означает, что вы назначаете ему адрес шлюза по умолчанию?

ответ

0

Похоже, и обеспечивает такое же поведение: сокет прослушивает все интерфейсы на данном порту:

ruby  38156 grych 7u IPv4 0x40a92a845129cab1  0t0 UDP *:6666 

Моя система Darwin 14,0 (OS X Mavericks), рубин 2.0.0 - Мне интересно, если это зависит от ОС.