Обычно разрешается использовать только один сокет

попытка прослушивания уже используемого порта (например, запуск двух экземпляров одного и того же сервера сокетов) в Windows дает:

[WinError 10048] используется только один адрес сокета
(протокол / сетевой адрес / порт) обычно разрешен

Я не понимаю, почему только одно использование адреса обычно разрешено. У меня было впечатление, что это абсолютное правило (по крайней мере, на Unix), но, по-видимому, нет. В каких случаях (и как) могут быть две программы, использующие один и тот же адрес сокета? Или я неверно истолковываю эту ошибку?

29
задан baum
08.02.2023 7:19 Количество просмотров материала 3245
Распечатать страницу

1 ответ

Это не абсолютное правило для всех систем UNIX. Некоторые имеют расширения, которые позволяют нескольким процессам связываться с одной и той же комбинацией адресов и портов, и ядро будет обрабатывать распределение входящих соединений между несколькими слушателями. Преимущество этого заключается в том, что вашему приложению не нужно обрабатывать мультиплексирование самих соединений, а вместо этого можно просто беспокоиться об обработке соединений, что в свою очередь дает вам быстрый и очень простой в реализации механизм, позволяющий параллелизм в сетевом коде.

в Linux опция сокета для этого называется SO_REUSEPORT, и много широко используемое высокопроизводительное программное обеспечение сервера (включая вещество как Апач HTTPD и nginx) поддерживает использование его.

Windows, поскольку он использует в основном прямой клон сетевого кода 4.4 BSD, имеет ту же концепцию параметров сокета и имеет свои собственные параметры для управления этим. По словам этот StackOverflow ответ параметр в вопрос там называется SO_REUSEADDR, и есть эквивалентный "анти-вариант" называется SO_EXCLUSIVEADDRUSE.

стоит отметить, что ничто не мешает несколько разные программы от использования этой опции и привязки к тому же порту. Это может привести ко всем видам головной боли при отладке сетевых проблем, а также является довольно важным соображением безопасности.

3
отвечен Austin Hemmelgarn 2023-02-09 15:07

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх