在进一步阅读之前,以下内容仅适用于运行嵌入式 Linux 和经过大量修改的内核的 MMUless (cortex-m*) 部件。
我有一个非常具体的理由*问这个问题,但我认为这个问题一般来说更有趣:
0)这必然适用于我正在编写的特定服务,尽管任何扩展或抽象都会很有趣。
1)假设我是一个进程的实例化,并且我知道可能存在与我相同的进程的先前或未来实例化。我收到了一个唯一的** 参数,它告诉我我正在实例化i,其中i被限制为一组 [0 - ( N -1)] ,总共有N个可能的实例化。基于i,我能够向配置服务注册并请求有关 I(第i个实例化)必须如何表现的当前参数。此外,我使用i确定性地创建一个 TCP 端口,以及其他与此处无关的参数,我必须绑定到该端口。
所以,问题是:只知道我想要的 TCP 端口(来自我的论点** i,无论是否相关),我怎么知道是否有任何其他进程绑定到同一个 TCP 端口?
当然可以处理失败的绑定,但是对于我的应用程序......以及一般的问题,在尝试绑定之前,对于已经绑定的端口,C 中最有效的测试是什么?或者更好地说,我想知道绑定是否会失败,而不是尝试绑定并处理失败。
*我正在使用某个库***和 nommu uC,当两个进程尝试绑定到同一个传输协议上的同一个端口时,这会导致所有的地狱——我不知道为什么,我没有时间弄清楚.
**我相信很少会出现某些情况,在这种情况下,两个实例可能会使用相同的参数异步生成,而该参数应该提供唯一和排他的标识;给定流程和系统架构,此流程的每个实例必须是连续的,因此是唯一的。如果启动具有相同参数的两个实例化,则一个实例必须以最少且受进程限制的逻辑和操作而死。
***我正在使用 uCLibc,但我提到的库有点晦涩难懂。