2
我正在使用Ubuntu 16.04。 創建一個連接/離開多播組的UDP套接字的C++代碼。Ubuntu C++多播雙人羣消息
加入/離開組的代碼工作正常,但我正在玩弄它,並注意到wireshark中有什麼,我無法找到關於它的信息。
當代碼在我呼叫離開組之前退出。 Wireshark接收2條離開組消息。我認爲當代碼退出時,內核將關閉套接字併發送離開組消息?但是爲什麼2?它總是2.
編輯:另外當我呼叫離開組wireshark拿起2離開組消息。 我確定該函數只執行一次(因爲打印)。 2消息是否正常行爲?
另外我添加了打印到連接功能,它只被調用一次,但有時wireshark拿起2加入消息?這有時會發生。我不知道這個。
但是代碼起作用,所以我認爲這種行爲與內核如何處理這些事情有關?
在代碼中,我不喜歡這樣的捧場
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 multicastRequest;
std::cout << "leaveGroup 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_DROP_MEMBERSHIP,&multicastRequest, sizeof(multicastRequest))