はソケットを閉じる前にIP_DROP_MEMBERSHIPを送信しないとどうなりますか?私は、IGMPを使用してマルチキャストグループに参加するいくつかのコードに取り組んでいる
struct ip_mreq mreq;
inet_pton(AF_INET, group, &mreq.imr_multiaddr.s_addr);
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (const char*)&mreq, sizeof(mreq)) < 0)
throw std::runtime_error(perror("setsockopt(IP_ADD_MEMBERSHIP)"));
アプリケーションがシャットダウンすると、それは
close(fd);
しかしソケットを閉じ、それが実行されない参加しますIP_DROP_MEMBERSHIP
。
- マルチキャストは引き続きアップストリームルータによってネットワークインターフェイスに配信されますか。
- OSが(私の場合、Linuxの場合)ソケットが閉じられたときに私のためのドロップメンバーシップのリクエストを送信するのに十分なスマートですか?
ありがとうございます!あなたは私がこれを確認することができる参考資料を持っていますか? –
はい、自分の答えを更新しましたので、自分で試してみることができます。さらに、src/net/ipv4/igmp.cという名前のカーネルソースファイル、つまりrefcntを維持するコードを見て、非ヌルからヌルに変わったときに 'leave group'を送信することができます(このファイルはIPv4グループ用です)会員のみ) –
非常に詳しい回答をありがとう! –