UDPでマルチキャストを使う(TTLを設定する)
ここでは、UDPでマルチキャストパケットを送信の際にTTL(Time To Live)を設定する方法を説明したいと思います。
TTLの設定
LinuxやWindowsの初期設定では、マルチキャストパケットはTTL 1で送信されます。 ローカルセグメントだけでマルチキャスト利用し、ルータを越える必要がない場合には問題はありませんが、ルータを越えるマルチキャストを行いたい場合には問題が発生します。
そのため、ルータを越える通信を行いたい場合には、マルチキャスト用TTLを変更しなくてはなりません。 以下に、TTLの設定例を示します。
#!/usr/bin/ruby
require "socket"
require "ipaddr"
udp = UDPSocket.open()
saddr = Socket.pack_sockaddr_in(10000, "239.192.1.2")
udp.setsockopt(Socket::IPPROTO_IP,
Socket::IP_MULTICAST_TTL, [3].pack("i"))
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