-
Notifications
You must be signed in to change notification settings - Fork 18.3k
Closed
Labels
Description
What version of Go are you using (go version
)?
$ go version go version devel +ab00f89c27 Mon Oct 7 20:58:25 2019 +0000 darwin/amd64
Does this issue reproduce with the latest release?
Don't know. Using master see go version
What operating system and processor architecture are you using (go env
)?
OSX Mojave 10.14.6
go env
Output
$ go env O111MODULE="" GOARCH="amd64" GOBIN="/Users/gert/bin" GOCACHE="/Users/gert/Library/Caches/go-build" GOENV="/Users/gert/Library/Application Support/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GONOPROXY="" GONOSUMDB="" GOOS="darwin" GOPATH="/Users/gert/go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/usr/local/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" GCCGO="gccgo" AR="ar" CC="clang" CXX="clang++" CGO_ENABLED="1" GOMOD="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/dv/8tlwvjr91zjdyq4rk14lkkfm0000gn/T/go-build945555905=/tmp/go-build -gno-record-gcc-switches -fno-common"
What did you do?
go build; ./example
What did you expect to see?
go build; ./udp
listen address: 127.0.0.1:5127
dial from: 127.0.0.1:50136
dial to: 127.0.0.1:5127
dial send: bytes=2 to=127.0.0.1:5127
listen received: bytes=2 from=127.0.0.1:50136
listen send: bytes=2 to=127.0.0.1:50136
dial received: bytes=2 from=127.0.0.1:5127
I expected using n, err := conn.WriteToUDP([]byte("not ok"), addr)
to have the same result as using n, err := conn.Write([]byte("ok"))
What did you see instead?
n, err := conn.WriteToUDP([]byte("not ok"), addr)
get stuck trying to connect
go build; ./udp
listen address: 127.0.0.1:5127
dial from: 127.0.0.1:56423
dial to: 127.0.0.1:5127
dial send: bytes=0 to=127.0.0.1:5127
package main
import (
"fmt"
"net"
"time"
)
func Listen() error {
addr := &net.UDPAddr{Port: 5127, IP: net.ParseIP("127.0.0.1")}
conn, err := net.ListenUDP("udp", addr)
if err != nil {
return err
}
defer conn.Close()
if conn != nil {
fmt.Printf("listen address: %s \n", conn.LocalAddr().String())
}
buffer := make([]byte, 1024)
n, addr, err := conn.ReadFromUDP(buffer)
fmt.Printf("listen received: bytes=%d from=%s\n", n, addr.String())
n, err = conn.WriteToUDP([]byte("ok"), addr)
fmt.Printf("listen send: bytes=%d to=%s\n", n, addr.String())
return err
}
func Dial() error {
addr := &net.UDPAddr{Port: 5127, IP: net.ParseIP("127.0.0.1")}
conn, err := net.DialUDP("udp", nil, addr)
if err != nil {
return err
}
defer conn.Close()
if conn != nil {
fmt.Printf("dial from: %s \n", conn.LocalAddr().String())
fmt.Printf("dial to: %s \n", conn.RemoteAddr().String())
}
n, err := conn.WriteToUDP([]byte("not ok"), addr)
// n, err := conn.Write([]byte("ok"))
fmt.Printf("dial send: bytes=%d to=%s\n", n, addr.String())
buffer := make([]byte, 1024)
n, addr, err = conn.ReadFromUDP(buffer)
fmt.Printf("dial received: bytes=%d from=%s\n", n, addr.String())
return err
}
func main() {
go Listen()
time.Sleep(1 * time.Second)
err := Dial()
if err != nil {
panic(err)
}
}