package main import "fmt" import "net" import "time" // TODO look into netmap + libpcap to bypass the kernel as much as possible func basic_test() { // TODO need a way to look up who our link-local neighbors are for each iface! //addr, err := net.ResolveUDPAddr("udp", "[ff02::1%veth0]:9001") addr, err := net.ResolveUDPAddr("udp", "[ff02::1]:9001") if err != nil { panic(err) } sock, err := net.ListenMulticastUDP("udp", nil, addr) if err != nil { panic(err) } defer sock.Close() go func() { saddr, err := net.ResolveUDPAddr("udp", "[::]:0") if err != nil { panic(err) } send, err := net.ListenUDP("udp", saddr) if err != nil { panic(err) } defer send.Close() msg := make([]byte, 1280) for { //fmt.Println("Sending...") send.WriteTo(msg, addr) } }() numPackets := 1000 start := time.Now() msg := make([]byte, 2000) for i := 0; i < numPackets; i++ { //fmt.Println("Reading:", i) sock.ReadFromUDP(msg) } timed := time.Since(start) fmt.Printf("%f packets per second\n", float64(numPackets)/timed.Seconds()) } func main() { basic_test() }