目的:接收在两个不同进程中发送到单个端口的UDP单播数据包 .
系统:Linux,语言:C
我可以使用SO_REUSEADDR将两个不同进程中的两个套接字绑定到同一个端口 . 但是,正如预期的那样,数据包只接收一个(稍后绑定的数据包) .
是否可以在两个进程中接收数据包?如果没有,tcpdump如何能够读取但不消耗数据包 .
为什么要单播?这正是多播的用途 .
为了回答第二个问题 - tcpdump 通过名为bpf的内容获取它侦听的每个数据包的副本,并且必须由网卡驱动程序明确支持 .
tcpdump
使用套接字API是不可能的,并且tcpdump在任何TCP / IP处理之前直接从网络接口中选择数据包 .
您唯一的机会是在一个进程中接收数据包并将其重新发送到另一个进程 .
如果你打开一个套接字,绑定,监听,然后fork()你的进程,传入的连接请求将每次交给一个随机选择的单个进程(我从来没有费心去弄清楚Linux的策略)使用,因为它很好地 balancer 了负载) .
我目前正在使用UDP服务器测试相同的行为 .
3 回答
为什么要单播?这正是多播的用途 .
为了回答第二个问题 -
tcpdump
通过名为bpf的内容获取它侦听的每个数据包的副本,并且必须由网卡驱动程序明确支持 .使用套接字API是不可能的,并且tcpdump在任何TCP / IP处理之前直接从网络接口中选择数据包 .
您唯一的机会是在一个进程中接收数据包并将其重新发送到另一个进程 .
如果你打开一个套接字,绑定,监听,然后fork()你的进程,传入的连接请求将每次交给一个随机选择的单个进程(我从来没有费心去弄清楚Linux的策略)使用,因为它很好地 balancer 了负载) .
我目前正在使用UDP服务器测试相同的行为 .