2014年5月2日金曜日

マルチキャストパケットの受信方法

自分向けの備忘録なので、要点のみとします。


  1. ソケットを生成する
  2. IPADDR_ANY+任意のポート番号で、bindする
  3. setsockoptにIPPROTO_IP/IP_ADD_MEMBERSHIPを指定して、マルチキャストグループからのメッセージを受け取れるようにする。
  4. 必要に応じて、3を繰り返す。
  5. recvfromでパケットを受け取る
これで、あとはファイアウォールを正しく設定すれば受信できました。

が、上の手順3~4で複数のマルチキャストグループを指定した場合は、受け取ったパケットがどのグループ宛だったのかが分かりません。

今回は、複数のグループからのマルチキャストパケットのグループを区別して受け取りたかったので、検索した結果、次のような方法があることを知りました。
  1. ソケットを生成する。
  2. setsockoptにSOL_SOCKET/SO_REUSEADDRを指定して、一つのポートに複数のソケットをbindできるようにする
  3. IPADDR_ANY+任意のポート番号で、bindする
  4. setsockoptにIPPROTO_IP/IP_ADD_MEMBERSHIPを指定して、マルチキャストグループからのメッセージを受け取れるようにする。
  5. 必要に応じて1~4を繰り返し、グループ毎に別々のソケットを用意する。
  6. 個々のソケットでrecvfromなどで受信する
要点は、複数のソケットを用意することと、それらのソケットに同じポート番号をbindできるようにSO_REUSEADDRフラグをセットすることでした。

0 件のコメント:

コメントを投稿