Динамическое связывание сокета с уменьшенным диапазоном

У меня есть сокет C ++ Server, который работает на виртуальной машине.
Я включил переадресацию портов для порта, где слушает сокет сервера. Однако из-за динамического связывания я не знаю, по какому порту будет осуществляться связь.
Операционная система, установленная на виртуальной машине, допускает динамическое связывание в следующем диапазоне:

cat /proc/sys/net/ipv4/ip_local_port_range
32768   61000

Есть ли способ (например, параметр для привязки / принятия), в котором я мог бы указать для моего сокета сервера, что он должен уменьшить этот диапазон до нескольких портов, т.е. [35000 35010]

ура

3

Решение

Прослушивающий сокет сервера должен быть привязан к определенному порту, чтобы принимать клиентские соединения. На большинстве платформ вы можете bind() сокет к порту 0, и он будет привязан к произвольно доступному порту. Но это все еще привязка к определенному порту.

Вы не можете привязать сокет к ряду нескольких портов. Если вам нужно прослушивать несколько портов, вы должны создать отдельный сокет прослушивания для каждого порта и bind() их индивидуально (т. е. один сокет на порту 35000, один сокет на порту 35001, один сокет на порту 35002 и т. д. до порта 35010).

Вы также не можете привязать сокет к доступному порту в заданном диапазоне. Вы можете привязать только к определенному порту или к порту 0. Если вам нужно прослушать доступный порт в пределах заданного диапазона, вы должны зациклить свой вызов на bind()начиная с самого нижнего порта и последовательно пробуя каждый порт, пока bind() успешно или диапазон исчерпан.

-2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]