检查Linux中的端口可用性

时间:2014-06-24 10:42:32

标签: c linux port

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

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

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

2 个答案:

答案 0 :(得分:2)

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

检查端口是否空闲然后绑定是不可能的并且是竞争条件:您刚刚检查过,端口是免费的,但有人已经使用过它。

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

答案 1 :(得分:1)

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

三个简单的步骤:

  1. 尝试在您想要的端口上打开套接字
  2. 如果有效则返回true并关闭套接字
  3. 如果没有,请返回false
  4. 在给出的示例中,他们远程执行此操作,但您可以轻松地更改它。