在进一步阅读之前,以下内容仅适用于运行嵌入式Linux和经过大量修改的内核的MMUless(cortex-m *)部分。
我有一个非常具体的理由*提出这个问题,但我认为这个问题一般来说更有趣:
0)这必然适用于我正在编写的特定服务,但任何扩展或抽象都会很有趣。
1)假设我是一个进程的实例化,我知道该进程的先前或未来实例可能与我相同。我通过一个独特的**参数告诉我,我实例化 i 其中 i 被限制为一个集合[0 - ( N -1)]用于总 N 可能的实例化。基于 i ,我能够注册配置服务并请求关于I, i 实例化的必须如何表现的当前参数。此外,我确定性地使用 i 来创建一个TCP端口,以及我必须绑定到的其他参数。
所以,问题是 :只知道我想要的TCP端口(来自我的论点** i ,是否相关或不),我怎么能判断是否有任何其他进程绑定到同一个TCP端口?
当然可以处理失败的绑定,但对于我的应用程序......以及一般的问题,在尝试绑定之前,对于已经绑定的端口,C中最有效的测试是什么?或者更好的说,我想知道绑定是否会失败,而不是尝试绑定并处理失败。
*我使用某个库***和nommu uC,当两个进程尝试绑定到同一传输协议上的同一个端口时导致所有地狱 - 我不明白为什么,我没有是时候搞清楚了。
**我相信很少会出现某些条件,其中两个实例可以与同一个参数异步生成,该参数应该提供唯一且唯一的标识;给定进程和系统体系结构,此进程的每个实例都必须是连续的,因此是唯一的。如果启动具有相同参数的两个实例,则必须使用最小的和进程限制的逻辑和操作来死亡。
***我使用的是uCLibc,但我提到的库有点模糊。
答案 0 :(得分:1)
只知道我想要的TCP端口(从我的参数** i派生,无论是否相关),如何判断是否有其他进程绑定到同一个TCP端口?
只需(尝试)connect()
即可。
答案 1 :(得分:1)
您可以解析/ proc / net / tcp并查看该端口是否正在使用中。这里有每个字段的详细说明:https://www.kernel.org/doc/Documentation/networking/proc_net_tcp.txt
挖掘aroud我发现可以在Linux中使用TCP / IP堆栈的功能,那些用于生成/ proc / net / tcp的功能。 这是一个内核模块(knetstat)项目的链接,它以人类可读的形式提供有关TCP套接字的信息。我知道这种方法可能无法集成到您的应用程序中,但是,这些信息可能与更好地理解问题相关。