【问题标题】:Using boost::asio is there a portable way to find out free port number使用 boost::asio 是否有一种可移植的方式来找出可用端口号
【发布时间】:2012-11-23 22:38:06
【问题描述】:

我目前正在尝试找出一种方法来查找空闲端口的编号以建立连接,最好是使用 boost::asio。然后这个端口号将用于监听(只有这样我才能打开一个套接字)。

粗略,有办法吗

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

端口留空的地方(设置为 0 不起作用)

以前看到的选项都不是可移植的或高效的。

【问题讨论】:

    标签: c++ sockets boost tcp port


    【解决方案1】:

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

    【讨论】:

    • 这是我最初的目标,但简单地传递 0 是行不通的,如问题中所述
    • 澄清一下:count
    • 你是如何初始化/获取endpoint的?请出示您的实际代码。
    • 我找到了问题所在。正确的方法是 tcp::resolver::query query("localhost","");而不是通过 0
    • 我正在使用的第 3 方库需要指定的端口。
    猜你喜欢
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2023-04-01
    • 1970-01-01
    • 2015-03-09
    • 2011-03-24
    相关资源
    最近更新 更多