2013-11-20 72 views
2

我目前能聽我寫的(這只是廣播「你好」)只是這樣一個簡單的廣播服務器:如何在c linux中的特定接口上收聽廣播?

int fd = socket(PF_INET, SOCK_DGRAM, 0); 
struct sockaddr_in addr; 
memset(&addr, 0, sizeof(addr)); 
add.sin_family = AF_INET; 
add.sin_port = htons(10074); 
bind(fd, struct sockaddr*) &addr, sizeof(addr)); 

char buf[800]; 
recvfrom(fd, buf, sizeof(buf), 0, NULL, 0); 

什麼雖然我不知道是,什麼接口將上面是使用?某種默認?我該如何改變我聽廣播的界面?我通過在ip_mreqn結構中設置imr_addressimr_ifindex來在多播中看到它,但我不確定是否存在廣播的等效項。

回答

2

如果你想改變你你聽港口僅有選擇一個特定的地址,在您的sin_addr(您目前從memset離開它0而不是明確指定INADDR_ANY)。該地址應該是您的IP地址之一,並且將從該地址自動選擇該接口。

2

如果你想監聽的接口名標識的特定接口上,就可以使用getifaddrs的接口名稱插槽映射到一個套接字地址集,然後綁定到每個這樣的地址。 (通常,可能有必要結合超過每個地址一個插座,接口可以有多個地址。)

這是一般更好地地址配置監聽器,不過,讓內核擔心該地址對應於哪個界面。這種方式與其他基於IP的服務一致,並且系統管理員習慣於此。