У меня есть сокет C ++ Server, который работает на виртуальной машине.
Я включил переадресацию портов для порта, где слушает сокет сервера. Однако из-за динамического связывания я не знаю, по какому порту будет осуществляться связь.
Операционная система, установленная на виртуальной машине, допускает динамическое связывание в следующем диапазоне:
cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000
Есть ли способ (например, параметр для привязки / принятия), в котором я мог бы указать для моего сокета сервера, что он должен уменьшить этот диапазон до нескольких портов, т.е. [35000 35010]
ура
Прослушивающий сокет сервера должен быть привязан к определенному порту, чтобы принимать клиентские соединения. На большинстве платформ вы можете bind()
сокет к порту 0, и он будет привязан к произвольно доступному порту. Но это все еще привязка к определенному порту.
Вы не можете привязать сокет к ряду нескольких портов. Если вам нужно прослушивать несколько портов, вы должны создать отдельный сокет прослушивания для каждого порта и bind()
их индивидуально (т. е. один сокет на порту 35000, один сокет на порту 35001, один сокет на порту 35002 и т. д. до порта 35010).
Вы также не можете привязать сокет к доступному порту в заданном диапазоне. Вы можете привязать только к определенному порту или к порту 0. Если вам нужно прослушать доступный порт в пределах заданного диапазона, вы должны зациклить свой вызов на bind()
начиная с самого нижнего порта и последовательно пробуя каждый порт, пока bind()
успешно или диапазон исчерпан.
Других решений пока нет …