我需要使用Linux在同一台计算机上启动几个游戏实例。创建游戏在指定的端口号处启动服务器(使用命令行命令,以--port NUMBER
作为参数),然后每个玩家将自己附加到该端口以玩游戏(以类似的方式)。
我需要通过一个使用stdlib.h系统库函数(system(const char *command)
)的小C程序并行启动数百个游戏来启动游戏服务器和游戏玩家。
我需要知道的是:在该端口号上启动游戏服务器之前,如何检查该C程序是否有可用的端口?重要的是要注意我的程序本身不绑定到任何端口,它只是启动(使用系统)实际尝试连接到该端口的程序。
答案 0 :(得分:2)
你必须直接使用bind(),如果它没有成功,你可以尝试另一个端口。
检查端口是否空闲然后绑定是不可能的并且是竞争条件:您刚刚检查过,端口是免费的,但有人已经使用过它。
阅读/ proc / net / tcp可以帮助你,但竞争条件仍然适用。
答案 1 :(得分:1)
最简单的方法通常是尝试打开一个端口,然后将错误作为已使用的端口处理。可以找到一个很好的例子here
三个简单的步骤:
在给出的示例中,他们远程执行此操作,但您可以轻松地更改它。