]> Cypherpunks repositories - gostls13.git/commitdiff
net: ensure WriteTo on Windows sends even zero-byte payloads
authorJake B <doogie1012@gmail.com>
Wed, 5 Sep 2018 08:52:43 +0000 (08:52 +0000)
committerAlex Brainman <alex.brainman@gmail.com>
Thu, 6 Sep 2018 09:54:01 +0000 (09:54 +0000)
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 <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
src/internal/poll/fd_windows.go
src/net/udpsock_test.go

index d04d332696db486ea8fd0c9f11cef8887a021f1f..b08cec26256ec46317b1088811a65357dc28cf49 100644 (file)
@@ -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
        }
index 494064444ec15f7c1b7ea892e33cbb38e15aece3..1f06397ffa38a7e59f7d6e7ede5504736fd09f0f 100644 (file)
@@ -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)
                        }
                }