Skip to content

Instantly share code, notes, and snippets.

@partkyle
Created October 13, 2014 22:35
Show Gist options
  • Select an option

  • Save partkyle/087410c40498badd5b8c to your computer and use it in GitHub Desktop.

Select an option

Save partkyle/087410c40498badd5b8c to your computer and use it in GitHub Desktop.
UDP is failing when the remote address goes down.
package main
import (
"fmt"
"io"
"io/ioutil"
"log"
"net"
)
func main() {
addr := net.UDPAddr{
Port: 0,
IP: net.ParseIP("127.0.0.1"),
}
// create a UDP listener
listener, err := net.ListenUDP("udp", &addr)
if err != nil {
log.Fatal(err)
}
// listen on that udp channel
waitForCloseChan := make(chan struct{})
go func() {
_, err := io.Copy(ioutil.Discard, listener)
if err != nil {
close(waitForCloseChan)
}
}()
// Dial to whatever UDP server was created
conn, err := net.Dial("udp", listener.LocalAddr().String())
if err != nil {
log.Fatal(err)
}
_, err = fmt.Fprintf(conn, "hello udp....")
if err != nil {
log.Fatal("error on initial writing to udp", err)
}
listener.Close()
<-waitForCloseChan
// do this in a loop because it does not consistently fail
for i := 0; i < 100; i++ {
_, err = fmt.Fprintf(conn, "hello udp....")
if err != nil {
log.Fatal("this should not fail:", err)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment