用boost ASIO找到一个空闲的TCP端口
Find a free TCP port with boost ASIO
我有一个c++主程序,它调用两个子进程。两个子进程通过主程序指定的TCP端口连接。
我看到寻找空闲端口的用例是,程序将尝试在给定的端口绑定,如果返回"失败",则给出一个端口++并再次尝试。
而对于我的情况,我需要在主程序中决定将哪个端口号传递给这两个子进程。
那么是否有一种简单的方法来检查端口是否可以使用而不尝试绑定它?
port = 1234
while(port < 1299)
if(port is bindable)
call to subprocesses
break;
else
port++
正确的方法是让操作系统为您选择一个可用的端口。创建一个套接字并将其绑定到端口0,然后查询套接字以找出实际绑定的端口。每个主要的操作系统都支持该特性。在Boost ASIO中实现这一功能的具体语法是什么,我不知道。
那么您必须解决每个端口在绑定后实际正在使用的问题,因此您必须:
-
使主程序创建并绑定2个套接字,然后将现有的套接字传递给子进程使用。
-
使子进程在启用
SO_REUSEADDR
套接字选项的情况下创建并绑定它们自己的本地套接字,以便它们可以绑定到主程序绑定到的相同端口(即使主程序在启动子进程之前关闭了其绑定的套接字)。 -
使子进程获得自己的端口(通过绑定端口0),然后将实际端口号报告给主程序,然后主程序可以根据需要在子进程之间传递它们。
我看到找到一个空闲端口的通常情况是,程序将尝试在给定的端口绑定,如果返回"失败",则给出一个端口++并再次尝试。
不,它不是。我不知道你在哪里看到的,但通常和正确的情况是指定端口0,让操作系统去做,然后使用getsockname()
来发现操作系统分配的端口。
相关文章:
- Qt Q串行端口未编程设备未关闭
- 如何在C++(VS2010)中设置超时读取USB端口?
- 为什么我们应该为网络连接指定一个端口?
- 仅使用一个端口一起设计两个服务器
- 端口音频仅取一个样本
- Qt串行端口有时会丢失最后一个字节
- C++释放Windows上另一个进程使用的网络端口
- 在C++中打开一个数字大于9的COM端口
- 有没有一个跨平台的c++串口库可以枚举端口
- 我的 linux 应用程序端口在停止时被另一个服务占用
- 如何更改此代码以从一个部分(而不是两个部分)中读取串行端口的所有数据
- Qt串行端口程序在另一个系统上运行时崩溃
- 在Windows机器上选择一个TCP端口,必要时添加一个防火墙例外(以编程方式)
- C库的一个端口需要在C中实现吗?
- 在windows中获取下一个打开的TCP端口
- 用boost ASIO找到一个空闲的TCP端口
- Winsock2 的 listen() 函数为每个端口查找一个连接;甚至那些不存在的?
- C++到C#端口的问题:如何处理一个以double*为参数的方法
- 是否有一个库可以从数据包的winpcap原始数据中获取ip地址和端口?
- 一个线程可以连接多个套接字到相同的ip/端口吗?