Cara untuk menetapkan IP_MULTICAST_LOOP pada multicast UDPConn di Golang (Pendekatan Alternatif)
Menetapkan IP_MULTICAST_LOOP untuk menghantar dan menerima paket multicast tempatan disokong dalam paket Windows . Walau bagaimanapun, pakej Go net tidak menyediakan kaedah yang mudah. Pendekatan alternatif melibatkan penggunaan pakej golang.org/x/net/ipv4.
Butiran Teknikal:
Fungsi net.ListenMulticastUDP, seperti yang dinyatakan dalam soalan, menetapkan IP_MULTICAST_LOOP kepada palsu. Walau bagaimanapun, kod sumber ipv4.NewPacketConn menunjukkan cara untuk menetapkan dan mendapatkan semula pilihan ini untuk IPv4:
import ( "golang.org/x/net/ipv4" ) // TestLoopback demonstrates setting and getting MulticastLoopback for IPv4 func TestLoopback(c *ipv4.PacketConn) error { // Get the current loopback setting loop, err := c.MulticastLoopback() if err != nil { return err } fmt.Printf("Current loopback status: %v\n", loop) // Set the loopback setting to true if err := c.SetMulticastLoopback(true); err != nil { return err } fmt.Printf("Loopback set to true\n") return nil }
Contoh Pelaksanaan:
Contoh berikut menunjukkan penggunaan golang .org/x/net/ipv4 untuk mendengar pada port multicast, menyertai kumpulan multicast dan menetapkan MulticastLoopback pilihan:
package main import ( "fmt" "net" "golang.org/x/net/ipv4" ) func main() { ipv4Addr := &net.UDPAddr{IP: net.IPv4(224, 0, 0, 251), Port: 5352} conn, err := net.ListenUDP("udp4", ipv4Addr) if err != nil { fmt.Printf("ListenUDP error %v\n", err) return } pc := ipv4.NewPacketConn(conn) // Join multicast group if err := pc.JoinGroup(iface, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 251)}); err != nil { fmt.Printf("JoinGroup error %v\n", err) return } // Set MulticastLoopback to true if err := TestLoopback(pc); err != nil { fmt.Printf("TestLoopback error %v\n", err) return } }
Contoh ini mempamerkan fleksibiliti menggunakan golang.org/x/net/ipv4 untuk operasi soket lanjutan, termasuk keupayaan untuk menetapkan dan mendapatkan semula IP_MULTICAST_LOOP untuk sambungan UDP multicast.
Atas ialah kandungan terperinci Bagaimana untuk Mendayakan IP_MULTICAST_LOOP untuk Multicast UDP di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!