- ソケットを生成する
- IPADDR_ANY+任意のポート番号で、bindする
- setsockoptにIPPROTO_IP/IP_ADD_MEMBERSHIPを指定して、マルチキャストグループからのメッセージを受け取れるようにする。
- 必要に応じて、3を繰り返す。
- recvfromでパケットを受け取る
これで、あとはファイアウォールを正しく設定すれば受信できました。
が、上の手順3~4で複数のマルチキャストグループを指定した場合は、受け取ったパケットがどのグループ宛だったのかが分かりません。
今回は、複数のグループからのマルチキャストパケットのグループを区別して受け取りたかったので、検索した結果、次のような方法があることを知りました。
- ソケットを生成する。
- setsockoptにSOL_SOCKET/SO_REUSEADDRを指定して、一つのポートに複数のソケットをbindできるようにする
- IPADDR_ANY+任意のポート番号で、bindする
- setsockoptにIPPROTO_IP/IP_ADD_MEMBERSHIPを指定して、マルチキャストグループからのメッセージを受け取れるようにする。
- 必要に応じて1~4を繰り返し、グループ毎に別々のソケットを用意する。
- 個々のソケットでrecvfromなどで受信する
要点は、複数のソケットを用意することと、それらのソケットに同じポート番号をbindできるようにSO_REUSEADDRフラグをセットすることでした。
0 件のコメント:
コメントを投稿