return c.conn.WriteToUDP(data, c.addr)
}
-func startUDP() chan Pkt {
+func startUDP(sink *chan Pkt) {
bind, err := net.ResolveUDPAddr("udp", *bindAddr)
ready := make(chan struct{})
if err != nil {
if err != nil {
log.Fatalln("Can not listen on UDP:", err)
}
- sink := make(chan Pkt)
+ log.Println("Listening on UDP", *bindAddr)
go func() {
buf := make([]byte, govpn.MTU)
var n int
lconn.SetReadDeadline(time.Now().Add(time.Second))
n, raddr, err = lconn.ReadFromUDP(buf)
if err != nil {
- sink <- Pkt{ready: ready}
+ *sink <- Pkt{ready: ready}
continue
}
- sink <- Pkt{
+ *sink <- Pkt{
raddr.String(),
UDPSender{lconn, raddr},
buf[:n],
}
}()
ready <- struct{}{}
- return sink
}