在c linux中,如何在特定接口上收听广播?
我现在可以通过以下方式收听我编写的一个简单的广播服务器(它只广播“hello”):在c linux中,如何在特定接口上收听广播?,c,linux,networking,multicast,broadcasting,C,Linux,Networking,Multicast,Broadcasting,我现在可以通过以下方式收听我编写的一个简单的广播服务器(它只广播“hello”): 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))
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\u mreqn
结构中设置imr\u address
和imr\u iIndex
,但我不确定是否有用于广播的等效地址。如果你想更改你监听的端口,只需在sin\u addr
(您当前将它从memset
中保留为0,而不是显式分配INADDR\u ANY
)。该地址应该是您的一个IP地址,接口将从中自动选择。如果您想更改您侦听的端口,只需在sin\u addr
(您当前将它从memset
中保留为0,而不是显式分配INADDR\u ANY
)。该地址应该是您的一个IP地址,接口将自动从中选择。如果要侦听由接口名称标识的特定接口,可以使用将接口名称映射到一组套接字地址,然后将套接字绑定到每个此类地址。(通常,每个地址可能需要绑定多个套接字;接口可以有多个地址。)
不过,通常最好按地址配置侦听器,并让内核考虑哪个地址对应哪个接口。这种方式与其他基于IP的服务一致,并且系统管理员也习惯于这种方式。如果要在由接口名称标识的特定接口上侦听,可以使用映射接口名称将套接字绑定到一组套接字地址,然后将套接字绑定到每个此类地址。(通常,每个地址可能需要绑定多个套接字;接口可以有多个地址。) 不过,通常最好按地址配置侦听器,让内核考虑哪个地址对应哪个接口。这种方式与其他基于IP的服务一致,系统管理员也习惯于这样做