C语言 检查Linux下的端口可用性



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

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

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

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

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

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

最简单的方法通常是尝试打开一个端口,然后将错误处理为已使用的端口。这里有一个很好的例子

三个简单的步骤:

  1. 尝试打开您想要的端口上的套接字
  2. 如果有效返回true并关闭套接字
  3. 如果没有,返回false

在给出的示例中,它们是远程执行的,但您可以轻松地更改它。

最新更新