【问题标题】:Checking port availability in Linux检查 Linux 中的端口可用性
【发布时间】:2014-08-14 14:14:29
【问题描述】:

我需要在使用 Linux 的同一台计算机上启动多个游戏实例。游戏创建后在指定端口号启动服务器(使用带有--port NUMBER 作为参数的命令行命令),然后每个玩家将自己附加到该端口以玩游戏(以类似的方式)。

我需要通过一个使用 stdlib.h 系统库函数 (system(const char *command)) 启动游戏服务器和游戏玩家的小 C 程序并行启动数百个游戏。

我需要知道的是:在使用该端口号启动游戏服务器之前,如何从该 C 程序中检查该端口是否可用?需要注意的是,我的程序本身并没有绑定到任何端口,它只是启动(与系统一起)实际尝试连接到该端口的程序。

【问题讨论】:

  • 你试过什么?我敢打赌,如果您尝试想到的第一件事,您就会知道,尝试将套接字绑定到已经存在的端口,它会失败。

标签: c linux port


【解决方案1】:

你必须直接使用bind(),如果不成功你可以尝试另一个端口。

检查一个端口是否空闲,然后绑定是不可能的,这将是一个竞争条件:你刚刚检查了一个端口是空闲的,但有人已经使用了它。

阅读 /proc/net/tcp 可以帮助你,但竞争条件仍然适用。

【讨论】:

    【解决方案2】:

    最简单的方法通常是尝试打开一个端口,然后将错误作为已使用的端口处理。一个很好的例子可以找到here

    三个简单的步骤:

    1. 尝试打开所需端口上的套接字
    2. 如果有效,则返回 true 并关闭套接字
    3. 如果不是,返回false

    在给出的示例中,他们远程执行此操作,但您可以轻松更改。

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 2016-03-15
      • 2011-02-21
      • 1970-01-01
      • 2012-04-10
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      相关资源
      最近更新 更多