package main import ( "fmt" "net" ) func serveProtoFamilyIPv4(ch chan string) { b := make([]byte, 1024) c, _ := net.ListenPacket("udp4", "0.0.0.0:5963") for { n, _, err := c.ReadFrom(b) if err != nil { fmt.Printf("pf4: %v\n", err) } else { ch <- "pf4: " + string(b[:n]) } } } func serveProtoFamilyIPv6(ch chan string) { b := make([]byte, 1024) c, _ := net.ListenPacket("udp6", "[::]:5963") for { n, _, err := c.ReadFrom(b) if err != nil { fmt.Printf("pf6: %v\n", err) } else { ch <- "pf6: " + string(b[:n]) } } } func main() { ch := make(chan string) go serveProtoFamilyIPv4(ch) go serveProtoFamilyIPv6(ch) for { fmt.Printf("%s\n", <-ch) } }