监听随机端口
业务上存在需求,一类服务监听随机端口,并由服务发现业务管理内部分配,那么我们如何实现监听随机端口呢?
实际上将端口设置为0即可在规定
范围内,分配一个可bind的端口
不论windows还是linux中bind函数传入port为0时,都将随机分配一个端口,相关文档可以查看下面的参考资料
随机端口的规定范围
linux和windows的规定不一致,但是可以由proc配置/注册表等手段修改
Linux
默认为32768 - 60999 之间
在文件cat /proc/sys/net/ipv4/ip_local_port_range
设定的范围内获取一个随机端口
Windows
默认为 49152 - 65535 之间
可以修改注册表HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 修改值
如何获取bind成功的具体端口
本身业务上随机bind成功之后,需要获取最后成功的bindPort上报给服务发现业务,因此我们在设定端口为0之后,我们可以通过getsockname函数获取当前的句柄bind的端口,
下面给定一个简单的linux例子:
1 | struct sockaddr_in serveraddr; |