Каковы варианты использования SO_REUSEADDR?

Я использовал SO_REUSEADDR иметь мой сервер, который был завершен для перезапуска с жалобой, что сокет уже, используется. Я задавался вопросом, существует ли другое использование SO_REUSEADDR? Кто-либо использовал опцию сокета для кроме упомянутой цели?

16
задан nbro 26 November 2018 в 10:35
поделиться

2 ответа

Для [1 117] TCP, основная цель состоит в том, чтобы перезапустить, закрылся/уничтожил процесс на том же адресе.

флаг необходим, потому что порт входит TIME_WAIT состояние, чтобы гарантировать, что все данные переданы.

, Если два сокета связываются с тем же интерфейсом и портом, и они - члены той же группы многоадресной передачи, данные будут поставлены обоим сокетам.

я предполагаю, что альтернативное использование было бы нападением безопасности, чтобы попытаться прервать данные.

( Источник )

<час>

Для [1 118] UDP, SO_REUSEADDR используется для многоадресной передачи.

больше чем один процесс может связать с тем же SOCK_DGRAM порт UDP, если эти bind() предшествуют:

int one = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));

В этом случае, каждая многоадресная передача поступления или широковещательная датаграмма UDP, предназначенная к общему порту, поставляется всем сокетам, связанным с портом.

( Источник )

30
ответ дан 30 November 2019 в 16:37
поделиться

Другое основное использование должно позволить несколько сокетов bind() к тому же порту на UDP. Вы не могли бы думать, что это подойдет, но иногда несколько приложений могут хотеть послушать на широковещательной передаче/групповых адресах с данным номером порта. Это также позволяет связывать с подстановочным адресом, также связывая с определенным адресом. Например, Apache мог бы связать с *:80 и 10.11.12.13:80

8
ответ дан 30 November 2019 в 16:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: