UDPでマルチキャストを使う(マルチキャストを送信する)
ここでは、UDPでマルチキャストパケットを送る方法を説明したいと思います。
マルチキャスト送信サンプル
まずは、マルチキャストを送信するサンプルを以下に示します。
#!/usr/bin/ruby
require "socket"
require "ipaddr"
udp = UDPSocket.open()
saddr = Socket.pack_sockaddr_in(10000, "239.192.1.2")
mif = IPAddr.new("127.0.0.1").hton
udp.setsockopt(Socket::IPPROTO_IP, Socket::IP_MULTICAST_IF, mif)
udp.send("HELLO", 0, saddr)
udp.close
上記例のようにsetsockoptを行わなくても、sendで指定する宛先をマルチキャストアドレスにするだけでマルチキャストパケットの送信は行えます。
ただし、複数インターフェースがある機器では出力インターフェースを指定しないと意図しないインターフェースからマルチキャストパケットが出てしまいます。 そのため、面倒でもIP_MULTICAST_IFは設定しておくことをお勧めいたします。 IP_MULTICAST_IFで特定のネットワークインターフェースを指定するには、そのネットワークインターフェースに設定されたIPアドレスを利用します。 上記例では、127.0.0.1(ローカルホスト、localhost)というネットワークインターフェースを指定しています。