[英]UDP unicast: two processes listening on same udp port; only one receiving packets
目的:接收在兩個不同進程中發送到單個端口的UDP單播數據包。
系統:Linux,語言:C
我可以使用SO_REUSEADDR將兩個不同進程中的兩個套接字綁定到同一個端口。 但是,正如預期的那樣,數據包只接收一個(稍后綁定的數據包)。
是否可以在兩個進程中接收數據包? 如果沒有,tcpdump如何能夠讀取但不消耗數據包。
使用套接字API是不可能的,並且tcpdump在任何TCP / IP處理之前直接從網絡接口中選擇數據包。
您唯一的機會是在一個進程中接收數據包並將其重新發送到另一個進程。
如果你打開一個套接字,綁定,監聽,然后fork()你的進程,傳入的連接請求將每次交給一個隨機選擇的單個進程(我從來沒有費心去弄清楚Linux的策略)使用,因為它很好地平衡了負載)。
我目前正在使用UDP服務器測試相同的行為。
為什么要單播? 這正是多播的用途。
為了回答第二個問題 - tcpdump
通過名為bpf
東西獲取它偵聽的每個數據包的副本 ,並且必須由網卡驅動程序明確支持。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.