From 3e5b5d69dcdb82494f550049986426d84dd6b8f8 Mon Sep 17 00:00:00 2001 From: Jake B Date: Wed, 5 Sep 2018 08:52:43 +0000 Subject: [PATCH] net: ensure WriteTo on Windows sends even zero-byte payloads This builds on: https://github.com/golang/go/pull/27445 "...And then send change to fix windows internal/poll.FD.WriteTo - together with making TestUDPZeroBytePayload run again." - alexbrainman - https://github.com/golang/go/issues/26668#issuecomment-408657503 Fixes #26668 Change-Id: Icd9ecb07458f13e580b3e7163a5946ccec342509 GitHub-Last-Rev: 3bf2b8b46bb8cf79903930631433a1f2ce50ec42 GitHub-Pull-Request: golang/go#27446 Reviewed-on: https://go-review.googlesource.com/132781 Run-TryBot: Alex Brainman TryBot-Result: Gobot Gobot Reviewed-by: Alex Brainman --- src/internal/poll/fd_windows.go | 3 --- src/net/udpsock_test.go | 12 +++++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/internal/poll/fd_windows.go b/src/internal/poll/fd_windows.go index d04d332696..b08cec2625 100644 --- a/src/internal/poll/fd_windows.go +++ b/src/internal/poll/fd_windows.go @@ -761,9 +761,6 @@ func (fd *FD) Writev(buf *[][]byte) (int64, error) { // WriteTo wraps the sendto network call. func (fd *FD) WriteTo(buf []byte, sa syscall.Sockaddr) (int, error) { - if len(buf) == 0 { - return 0, nil - } if err := fd.writeLock(); err != nil { return 0, err } diff --git a/src/net/udpsock_test.go b/src/net/udpsock_test.go index 494064444e..1f06397ffa 100644 --- a/src/net/udpsock_test.go +++ b/src/net/udpsock_test.go @@ -357,13 +357,15 @@ func TestUDPZeroBytePayload(t *testing.T) { var b [1]byte if genericRead { _, err = c.(Conn).Read(b[:]) + // Read may timeout, it depends on the platform. + if err != nil { + if nerr, ok := err.(Error); !ok || !nerr.Timeout() { + t.Fatal(err) + } + } } else { _, _, err = c.ReadFrom(b[:]) - } - switch err { - case nil: // ReadFrom succeeds - default: // Read may timeout, it depends on the platform - if nerr, ok := err.(Error); !ok || !nerr.Timeout() { + if err != nil { t.Fatal(err) } } -- 2.50.0