Я использовал SO_REUSEADDR
, чтобы мой сервер, который был завершен, чтобы перезапустить, не жалуясь, что сокет уже используется. Мне было интересно, есть ли другие варианты использования SO_REUSEADDR
? Кто-нибудь использовал опцию сокета за исключением указанной цели?Использование SO_REUSEADDR?
ответ
Для TCP: основной целью является перезапуск закрытого/убитого процесса по тому же адресу.
Флаг необходим, потому что порт переходит в состояние TIME_WAIT, чтобы обеспечить передачу всех данных.
Если два сокета связаны с одним интерфейсом и портом и являются членами одной и той же группы многоадресной передачи, данные будут доставлены в оба гнезда.
Я предполагаю, что альтернативное использование будет атакой безопасности, чтобы попытаться перехватить данные.
(Source)
Для UDP: SO_REUSEADDR используется для многоадресной рассылки
Более чем один процесс может связываться с же порт SOCK_DGRAM UDP, если Bind() является которому предшествуют:
int one = 1; setsockopt (носок, SOL_SOCKET, SO_REUSEADDR, & один, SizeOf (один))
В этом случае каждый входящие многоадресный или широковещательный UDP-дейтаграмма суждено общий порт доставляются всем розеток, связанных с портом ,
(Source)
Требуется уточнение. Порт прослушивания не входит в TIME_WAIT, но принятые соединения могут. TIME_WAIT не существует, чтобы обеспечить передачу всех данных, чтобы избежать путаницы с последующим соединением между теми же конечными точками. – EJP
Является ли связывание на стороне отправителя или стороне приемника (для UDP: SO_REUSEADDR)? Что произойдет, если отправитель и получатель являются отдельными узлами в сети? – Sammy
Другое основное использование, чтобы позволить тройники к bind()
одному и тому же порту UDP. Возможно, вы не думаете, что это произойдет, но иногда несколько приложений могут прослушивать широковещательные/многоадресные адреса с заданным номером порта. Он также позволяет привязываться к подстановочному адресу, а также привязывать к определенному адресу. Например, Apache может связываться с *: 80 и 10.11.12.13:80
Спасибо, мне было интересно то же самое. Связанный вопрос: почему SO_REUSEADDR не используется по умолчанию? – 2009-02-23 15:33:03