首页 > 解决方案 > 如何从不同的应用程序但从同一个 SOURCE 端口发送 UDP 数据报?

问题描述

我们有两个应用程序

  1. 第一个是 UDP 服务器,它使用 SOURCE 端口 (12345) 侦听和响应
  2. 第二个应用是只响应不监听,我们需要响应一个指定的源端口(12345)

如何做到这一点?

我们正在尝试使用许多场景,但是:

  1. 我们无法在第二个应用程序中绑定套接字,因为它在第一个应用程序中使用
  2. 我们不能在第二个应用程序中使用 SO_REUSEPORT 进行绑定,因为这个应用程序开始获取 UDP 数据而不是第一个应用程序
  3. 我们可以使用 IPC 从第二个应用程序到第一个应用程序,然后像往常一样发送 UDP (sendto),但这是一个非常巨大的解决方法

标签: clinuxsocketsnetworkingudp

解决方案


一种选择是服务器(第一个进程)将套接字文件描述符发送给发送者(第二个进程),以便它们共享相同的内核 UDP 套接字文件描述(而不是 2 个绑定到同一端口的套接字),但是只有一个进程(服务器)从中读取。

fork您可以使用或fork-execUnix 域套接字SCM_RIGHTS辅助消息将文件描述符传递给另一个进程。


推荐阅读