Comment définir IP_MULTICAST_LOOP sur UDPConn de multidiffusion dans Golang (approche alternative)
La configuration de IP_MULTICAST_LOOP pour envoyer et recevoir des paquets de multidiffusion locaux est prise en charge sous Windows . Cependant, le package Go net ne propose pas de méthode pratique. Une approche alternative consiste à utiliser le package golang.org/x/net/ipv4.
Détails techniques :
La fonction net.ListenMulticastUDP, comme mentionné dans la question, définit IP_MULTICAST_LOOP sur false. Cependant, le code source de ipv4.NewPacketConn montre comment définir et récupérer cette option pour 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 }
Exemple d'implémentation :
L'exemple suivant montre l'utilisation de golang .org/x/net/ipv4 pour écouter sur un port de multidiffusion, rejoindre un groupe de multidiffusion et définir l'option MulticastLoopback :
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 } }
Cet exemple montre la flexibilité de l'utilisation de golang.org/x/net/ ipv4 pour les opérations de socket avancées, y compris la possibilité de définir et de récupérer IP_MULTICAST_LOOP pour les connexions UDP multicast.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!