c - 如何从不同的应用程序但从同一个 SOURCE 端口发送 UDP 数据报?
问题描述
我们有两个应用程序
- 第一个是 UDP 服务器,它使用 SOURCE 端口 (12345) 侦听和响应
- 第二个应用是只响应不监听,我们需要响应一个指定的源端口(12345)
如何做到这一点?
我们正在尝试使用许多场景,但是:
- 我们无法在第二个应用程序中绑定套接字,因为它在第一个应用程序中使用
- 我们不能在第二个应用程序中使用 SO_REUSEPORT 进行绑定,因为这个应用程序开始获取 UDP 数据而不是第一个应用程序
- 我们可以使用 IPC 从第二个应用程序到第一个应用程序,然后像往常一样发送 UDP (sendto),但这是一个非常巨大的解决方法
解决方案
一种选择是服务器(第一个进程)将套接字文件描述符发送给发送者(第二个进程),以便它们共享相同的内核 UDP 套接字文件描述(而不是 2 个绑定到同一端口的套接字),但是只有一个进程(服务器)从中读取。
fork
您可以使用或fork-exec
或Unix 域套接字SCM_RIGHTS
辅助消息将文件描述符传递给另一个进程。
推荐阅读
- android - 对于 Android 应用程序,如何检查特定图像视图中正在使用的资源 ID?
- sql - SQL 查询字符串在 SQL Server Management Studio 中有效,但在带有 SQLCommand.ExecuteReader 的 VB.net 中无效
- javascript - VAST 广告未在网站上的视频播放器中播放
- xml - 如何使用 XSLT 读取 XML
- java - 如何将paintComponent 方法连接到JButton 以绘制矩形或椭圆?
- django - Django 不将结果输出到表中
- node.js - 如何在 Firebase Cloud Functions 中捆绑和要求非 JS 依赖项?
- go - 无法模拟结构进行测试
- botframework - 某些 Teams 系统消息上的 Teams 机器人的 onTurn 错误
- r - 多项式 Reg 的 Wald 检验。在 R 中