Skip to content

net: conn.WriteToUDP([]byte("not ok"), addr) #34758

@gertcuykens

Description

@gertcuykens

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)
	}
}

https://play.golang.org/p/8Fq1XyYTFs1

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions