Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c linux中,如何在特定接口上收听广播?_C_Linux_Networking_Multicast_Broadcasting - Fatal编程技术网

在c linux中,如何在特定接口上收听广播?

在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))

我现在可以通过以下方式收听我编写的一个简单的广播服务器(它只广播“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));

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的服务一致,系统管理员也习惯于这样做