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

epa*_*dit 5 c sockets linux udp

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

系统:Linux,语言:C

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

两个进程都可以接收数据包吗?如果不是,tcpdump 如何能够读取但不消耗数据包。

Nik*_*sov 0

为什么单播?这正是多播的用途。

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

  • `tcpdump` 通过打开 AF_PACKET(或等效)套接字放置的“tap”获取数据包,该套接字插在网卡驱动程序上方(Linux 上的“netif_rx”中的 IIRC)。您可以在该套接字顶部放置一个 BPF 过滤器来过滤您感兴趣的帧/数据报。 (2认同)