多个不相关的进程是否可以使用同一UDP端口?(Linux)

多个不相关的进程是否可以使用同一UDP端口?(Linux),linux,sockets,networking,udp,Linux,Sockets,Networking,Udp,我有一个发送和接收UDP数据包的Linux程序(它根据协议与各种远程机器进行交互)。我想从第二个程序“注入”额外的UDP数据包,以便返回地址是主程序使用的IP/端口 例如,假设主程序正在向各种远程主机发送“ping”样式的UDP数据包,而这些主机会发回“pong”数据包。我希望注入器程序在某处发送一个ping,并让主程序接收pong。(主程序不会期待乒乓球,因为它没有发出乒乓球,但没关系。) 一种复杂的方法是让主程序从本地管道或其他地方接收注入的数据包,然后将它们发送出去。但是,如果注入器只需在

我有一个发送和接收UDP数据包的Linux程序(它根据协议与各种远程机器进行交互)。我想从第二个程序“注入”额外的UDP数据包,以便返回地址是主程序使用的IP/端口

例如,假设主程序正在向各种远程主机发送“ping”样式的UDP数据包,而这些主机会发回“pong”数据包。我希望注入器程序在某处发送一个ping,并让主程序接收pong。(主程序不会期待乒乓球,因为它没有发出乒乓球,但没关系。)


一种复杂的方法是让主程序从本地管道或其他地方接收注入的数据包,然后将它们发送出去。但是,如果注入器只需在sendto()数据包上设置“from”地址,就更容易了。(我也不希望注入器窃取主程序的数据包。注入器可能会很短,但如果它绑定了主程序的端口,那么理论上系统可以向它而不是主程序发送pong?

这可能会有帮助吗?绑定套接字后,您应该能够发送。我已经有很长一段时间没有在Linux中完成套接字级别的工作了,但我怀疑您可能根本就不想尝试从它那里接收信息?谢谢,那个参考资料很有用!看起来SO_REUSEADDR或SO_REUSEPORT(2013年1月添加到Linux)都可以让我在两个进程中绑定端口,但预期的使用情形是在进程之间共享负载——我的注入器最终会窃取一些用于主进程的数据包。与某些答案/评论相反,这些选项似乎并没有将所有数据包复制到所有侦听器(典型的情况是多播,您希望所有侦听器都接收所有数据包。但这是通过一个特殊地址完成的,而不仅仅是常规地址上的一个端口)您确定即使您没有尝试通过套接字接收数据包,它也会窃取数据包吗?无论如何,在最坏的情况下,您可以始终使用原始IP协议发送数据,并自行构建数据报。查看源代码:是的,我编写了一个简单的UDP侦听器,打印出它得到了什么。在一个端口上运行两个副本,然后从另一个端口/机器发送数据包。只有一个侦听器获得每个数据包。当发送方在同一台机器和端口上运行时,有时侦听器什么也得不到。我认为这是因为数据包排队返回到发送方的套接字(然后被丢弃,因为发送方没有接收就退出)。不管怎么说,这些东西看起来很模糊(系统之间、内核版本之间的差异等等),不值得尝试这样做——我会做一些其他的事情。所描述的实验并不代表你在问题中所要求的——有两个UDP侦听器与有一个UDP发送器/接收器和一个注入器是不同的,那么,你为什么要从一个案例中得出另一个案例的结论呢?另一个问题:它必须在具有多个IP地址的机器上工作吗?