UDP单播:两个进程侦听同一个udp端口;只有一个接收数据包

时间:2012-03-15 13:55:03

标签: c linux sockets udp

目的: 接收在两个不同进程中发送到单个端口的UDP单播数据包。

系统:Linux,语言:C

我可以使用SO_REUSEADDR将两个不同进程中的两个套接字绑定到同一个端口。但是,正如预期的那样,数据包只接收一个(之后绑定的数据包)。

是否可以在两个进程中接收数据包?如果没有,tcpdump如何能够读取但不消耗数据包。

3 个答案:

答案 0 :(得分:1)

使用套接字API是不可能的,tcpdump可以在任何TCP / IP处理之前直接从网络接口中选择数据包。

您唯一的机会是在一个进程中接收数据包并将其重新发送到另一个进程。

答案 1 :(得分:0)

为什么要单播?这正是多播的目的。

要回答第二个问题 - tcpdump通过名为bpf的内容获取其收听的每个数据包的副本,并且必须由网卡明确支持驱动程序。

答案 2 :(得分:0)

如果你打开一个套接字,绑定,监听,然后fork()你的进程,传入的连接请求将每次都交给一个随机选择的单个进程(我从来没有费心去弄清楚Linux使用的策略,因为它很好地平衡了负载。)

我目前正在使用UDP服务器测试相同的行为。