套接字动态绑定到缩小范围

Socket dynamic binding to reduced range

我有一个在虚拟机中运行的 C++ 服务器套接字。 我已经为服务器套接字正在侦听的端口启用了端口转发。但是,由于动态绑定,我不知道通信将在哪个端口上完成。 我在虚拟机中拥有的 OS 接受以下范围内的动态绑定:

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

有没有一种方法(比如 bind/accept 的参数)我可以指定我的服务器套接字他必须将这个范围缩小到几个端口,即:[35000 35010]

干杯

侦听服务器套接字必须绑定到特定端口才能接受客户端连接。在大多数平台上,您可以 bind() 一个连接到端口 0 的套接字,它将绑定到一个随机的可用端口。但它仍然绑定到特定端口。

您不能将一个套接字绑定到一个范围内的多个端口。如果你需要在多个端口上监听,你必须为每个端口创建一个单独的监听套接字并 bind() 它们分别(即一个套接字在端口 35000 上,一个套接字在端口 35001 上,一个套接字在端口 35002 上,依此类推, 到端口 35010).

您也不能将套接字绑定到给定范围内的可用端口。你只能绑定到一个特定的端口,或者绑定到端口 0。如果你需要监听给定范围内的可用端口,你必须循环你的调用到 bind(),从最低的端口开始尝试每个端口顺序直到 bind() 成功或范围用尽。