Мне интересно, как ОС гарантирует, что клиенты не получат тот же «случайный» (привязывающий сокет, установив порт на 0) порт, как любой другой клиент в сети, поскольку я хочу общаться по протоколу UDP между моим сервером и множеством машин, использующих один и тот же локальный IP-адрес, было бы очень трудно, если бы клиенты получали пакеты друг от друга.
0
Ответы:
В ОС есть список используемых в данный момент портов, обычно она просто выбирает следующий доступный. Тем не менее, он пытается избежать низких цифр.
Порты не должны быть уникальными в сети, только за соединение. Соединение состоит из
Если что-то из этого отличается, это другое соединение. Это означает, что сервер может иметь много подключений к одному и тому же порту с разных IP-адресов или с разных портов с одного и того же IP-адреса.
источник
Это не так. Это гарантирует, что местные приложения получить уникальный порт в текущем хосте , Ничего общего с клиентами или сетью.
Они этого не делают, если они не находятся на одном и том же хосте, и они сознательно используют один и тот же порт, но вам придется запрограммировать их оба, чтобы сделать это намеренно (т.е. установить SO_REUSEPORT на обоих сокетах).
источник
SO_REUSEPORT
используется для многоадресных клиентов. Если вы установите его для всех задействованных сокетов дейтаграмм, все они могут использовать один и тот же порт и будут получать многоадресные рассылки на этот порт.