go で udp サーバーを構築しようとしたところ、UDPConn のメソッド ReadFromUDP がスレッドをブロックしていないことがわかりました。この問題に直面している人がいて、解決策が見つからないことをグーグルで調べました。
私のシステムは osx 10.8.2、go バージョンは 1.1.1 です
以下のコードリスト
addr, _ := net.ResolveUDPAddr("udp", "localhost:10234")
conn, err := net.ListenUDP("udp", addr)
if err != nil {
fmt.Println(err.Error())
return
}
defer conn.Close()
var buf []byte
for {
n, remote_addr, _ := conn.ReadFromUDP(buf)
fmt.Println("from", remote_addr,"got message:", string(buf[:n]))
}
次のリストを取得しました。from <nil> got message: