以下は、単純な IPv4 UDP ブロードキャストであり、その後にすべてのインターフェイスでリッスンします。
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)
sock.bind(("", 1337))
sock.sendto("hello world", ("255.255.255.255", 1337))
while True:
data, addr = sock.recvfrom(0x100)
print "received from {0}: {1!r}".format(addr, data)
これを調整して、IPv4 と IPv6 の両方を送受信できるようにしたいと考えています。
私はできるだけ多くのことを調べて読みましたが、大まかに以下が私がたどる必要があるルートであると信じています:
- IPv6 ソケットを作成します。
- ソケットをリンクまたはサイト ローカル マルチキャスト グループに追加します。
- 使用中のグループのマルチキャスト アドレスに UDP パケットを送信します。
私が持っている詳細な情報は、いくつかのインターフェースにバインドする必要があるかもしれないということです。そして、setsockopt()
マルチキャストパケットも受信する必要があることを使用してソケットに伝えます。最後にgetaddrinfo()
、IPv6 が利用できない場所で IPv4 に優雅に「ドロップバック」するために全面的に使用できます。
私はこれの多くを実装しましたが、主にマルチキャストの部分でつまずきました。Python での完全なコード例、または必要な定数とアドレスの明確な説明が望ましいです。