使用boost :: asio有一种可移植的方法来查找自由端口号

时间:2012-12-05 23:36:58

标签: c++ sockets boost tcp port

我正在尝试找出一种方法来查找建立连接的自由端口的数量,理想情况下使用boost :: asio。然后将使用此端口号进行侦听(然后才能打开套接字)。

粗略地说,有没有办法

   tcp::resolver::query query("localhost", port); 

其中端口留空(将其设置为0不起作用)

以前看到的选项都不是便携式的,也不是高效的。

1 个答案:

答案 0 :(得分:10)

处理此问题的最佳方法是让操作系统在套接字绑定到端口时选择一个随机可用端口。告诉套接字绑定到端口0,然后查询套接字,看它绑定的实际端口是否成功。不要试图提前找到一个端口然后绑定它,这会引入竞争条件。另一个套接字可能会在您找到它之后阻塞该端口,但在绑定它之前。