]> Cypherpunks repositories - gostls13.git/commitdiff
internal/poll: handle zero-byte write in FD.WriteTo
authorAlex Brainman <alex.brainman@gmail.com>
Sun, 9 Sep 2018 04:21:25 +0000 (14:21 +1000)
committerAlex Brainman <alex.brainman@gmail.com>
Sun, 9 Sep 2018 04:42:15 +0000 (04:42 +0000)
Zero-byte write was fixed by CL 132781, that was submitted 3 days ago.
But I just submitted CL 129137, and the CL broken zero-byte write
functionality without me noticing. CL 129137 was based on old commit
(older than 3 days ago), and try-bots did not discover the breakage.

Fix zero-byte write again.

Fixes windows build.

Change-Id: Ib403b25fd25cb881963f25706eecca92b924aaa1
Reviewed-on: https://go-review.googlesource.com/134275
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

index b5aaafda0235a2dc8c5959d7d7e9342bdc4c0595..19d9a12dad83b9b9e1d388c113328fc0dc409bea 100644 (file)
@@ -811,6 +811,17 @@ func (fd *FD) WriteTo(buf []byte, sa syscall.Sockaddr) (int, error) {
        }
        defer fd.writeUnlock()
 
+       if len(buf) == 0 {
+               // handle zero-byte payload
+               o := &fd.wop
+               o.InitBuf(buf)
+               o.sa = sa
+               n, err := wsrv.ExecIO(o, func(o *operation) error {
+                       return syscall.WSASendto(o.fd.Sysfd, &o.buf, 1, &o.qty, 0, o.sa, &o.o, nil)
+               })
+               return n, err
+       }
+
        ntotal := 0
        for len(buf) > 0 {
                b := buf