如何使用 unix Sockets API 查找本地可用的 UDP 端口

Posted

技术标签:

【中文标题】如何使用 unix Sockets API 查找本地可用的 UDP 端口【英文标题】:How to find a locally available UDP port with unix Sockets API 【发布时间】:2010-09-21 13:21:48 【问题描述】:

我有一个应用程序,其中可能有许多进程必须向一个进程发送消息。我认为最方便的方法是发送一个 UDP 数据报。

打开套接字时,我需要指定要监听的端口。因为我只想触发并忘记 UDP 数据报,所以我想让操作系统选择一个可用端口。我宁愿不必寻找一个,特别是因为我的进程的许多实例可能正在运行。有没有办法告诉操作系统只选择一个可用端口(或者更好的是,甚至不打开侦听套接字)来触发并忘记我的 UDP 数据报?

【问题讨论】:

我不明白这个问题。你能否澄清一下这个显示过程 S(发送)和过程(R)接收以及你认为他们应该做什么?我认为您遗漏了部分协议。 【参考方案1】:

是的。指定 0 作为端口。操作系统将为您选择一个可用的端口。

【讨论】:

啊,我觉得事情就是这么简单。谢谢! 请注意,您仍然需要一些机制来让其他进程知道它们必须传输到哪个套接字! 嗯,我的接收进程有一个静态套接字号。但是发送进程并不期望得到回复。 在这种情况下,您的问题令人困惑-听起来您试图询问如何为接收过程选择端口。你的传输进程不需要“监听”,它们需要“绑定”。 发件人也不需要绑定,除非您希望从多宿主主机上的特定接口发送流量。【参考方案2】:

回答“问题”而不是“问题”

如果所有进程都在同一台 PC 上运行,您可能需要查看共享文件或网络堆栈以外的其他一些通信方式。

我建议您探索 Boost 的进程间库中的选项 http://www.boost.org/doc/libs/1_37_0/doc/html/interprocess.html

这里的快速指南: http://www.boost.org/doc/libs/1_37_0/doc/html/interprocess/quick_guide.html

具体来说,我建议您在进程之间使用命名管道或共享内存。

【讨论】:

文件是我现在所拥有的,但我发现在流量大时进程会针对文件系统进行备份。由于它是我每次访问时都会启动的可执行文件,因此大型库已被淘汰,任何需要大量开销来设置的东西也是如此。

以上是关于如何使用 unix Sockets API 查找本地可用的 UDP 端口的主要内容,如果未能解决你的问题,请参考以下文章

RK3399平台开发系列讲解(进程篇)14.8Unix Domain Sockets使用

如何使用 spotify api 查找热门曲目和新版本

Unix domain sockets

[cross compile]cygwin和mingw

UNIX domain sockets

sockets啥意思