Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++ Ubuntu C++;多播双离群消息_C++_Linux_Sockets_Kernel_Multicast - Fatal编程技术网

C++ Ubuntu C++;多播双离群消息

C++ Ubuntu C++;多播双离群消息,c++,linux,sockets,kernel,multicast,C++,Linux,Sockets,Kernel,Multicast,我正在开发ubuntu 16.04。 C++代码创建一个UDP套接字,加入/离开多播组。 加入/离开团队的代码是有效的,但我在玩它时注意到wireshark中有一些东西,我找不到有关它的信息 当代码在我调用离开组之前退出时。Wireshark接收到2条留言。我认为当代码退出时,内核将关闭套接字并发送一条离开组消息?但为什么是2?总是2点 编辑:当我打电话给休假组时,wireshark会收到两条休假组消息。 我确信该函数只执行一次(因为打印)。这两条消息是否正常 我还向join函数添加了一个pri

我正在开发ubuntu 16.04。 C++代码创建一个UDP套接字,加入/离开多播组。 加入/离开团队的代码是有效的,但我在玩它时注意到wireshark中有一些东西,我找不到有关它的信息

当代码在我调用离开组之前退出时。Wireshark接收到2条留言。我认为当代码退出时,内核将关闭套接字并发送一条离开组消息?但为什么是2?总是2点

编辑:当我打电话给休假组时,wireshark会收到两条休假组消息。 我确信该函数只执行一次(因为打印)。这两条消息是否正常

我还向join函数添加了一个print,它只被调用一次,但wireshark有时会收到两条join消息?这种情况有时会发生。我不知道这个

但是代码是有效的,所以我认为行为更多地与内核如何处理这些事情有关

在代码中,我对join执行类似的操作

ip_mreq multicastRequest;
std::cout << "joinGroup called" << std::endl;
multicastRequest.imr_multiaddr.s_addr = inet_addr(multicastGroup.c_str());
multicastRequest.imr_interface.s_addr = inet_addr(interfaceAddress(interface).c_str());
setsockopt(sockDesc_, IPPROTO_IP, IP_ADD_MEMBERSHIP,&multicastRequest, sizeof(multicastRequest))
ip_mreq多域测试;
std::cout这在中进行了描述。所有IGMP查询都会重复多次,称为稳健性变量。稳健性变量的值默认为2,可以使用sysctl
net.ipv4.igmp_qrv
进行调整:

$ sysctl net.ipv4.igmp_qrv
net.ipv4.igmp_qrv = 2
$ sudo sysctl net.ipv4.igmp_qrv=1
net.ipv4.igmp_qrv = 1
$ sysctl net.ipv4.igmp_qrv
net.ipv4.igmp_qrv = 2
$ sudo sysctl net.ipv4.igmp_qrv=1
net.ipv4.igmp_qrv = 1