Golang의 멀티캐스트 UDPConn에서 IP_MULTICAST_LOOP를 설정하는 방법(대체 접근 방식)
로컬 멀티캐스트 패킷을 보내고 받도록 IP_MULTICAST_LOOP를 설정하는 것은 Windows에서 지원됩니다. . 그러나 Go net 패키지는 편리한 방법을 제공하지 않습니다. 대안적인 접근 방식은 golang.org/x/net/ipv4 패키지를 사용하는 것입니다.
기술 세부 정보:
질문에서 언급한 net.ListenMulticastUDP 함수는, IP_MULTICAST_LOOP를 false로 설정합니다. 그러나 ipv4.NewPacketConn의 소스 코드는 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 }
구현 예:
다음 예는 golang 사용을 보여줍니다. .org/x/net/ipv4 - 멀티캐스트 포트를 수신하고, 멀티캐스트 그룹에 가입하고, 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 } }
이 예는 멀티캐스트 UDP 연결을 위한 IP_MULTICAST_LOOP를 설정하고 검색하는 기능을 포함하여 고급 소켓 작업에 golang.org/x/net/ipv4를 사용하는 유연성을 보여줍니다.
위 내용은 Golang에서 멀티캐스트 UDP에 대해 IP_MULTICAST_LOOP를 활성화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!