Commit 4b8bfa63 authored by Shawn Walker-Salas's avatar Shawn Walker-Salas Committed by Brad Fitzpatrick

net: fix sendfile for Solaris

If a retryable error such as EAGAIN/EINTR is encountered during a call
to sendfile(), we should not assume that a partial write occurred.
Instead, just like any other platform, we should always try again even
if 0 bytes were written.

Fixes #20857

Change-Id: I9aa48d193c27c6794c550320da4d3f7544041f37
Reviewed-on: https://go-review.googlesource.com/47351
Run-TryBot: Shawn Walker-Salas <shawn.walker@oracle.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 990dac27
...@@ -33,10 +33,7 @@ func SendFile(dstFD *FD, src int, pos, remain int64) (int64, error) { ...@@ -33,10 +33,7 @@ func SendFile(dstFD *FD, src int, pos, remain int64) (int64, error) {
n, err1 := syscall.Sendfile(dst, src, &pos1, n) n, err1 := syscall.Sendfile(dst, src, &pos1, n)
if err1 == syscall.EAGAIN || err1 == syscall.EINTR { if err1 == syscall.EAGAIN || err1 == syscall.EINTR {
// partial write may have occurred // partial write may have occurred
if n = int(pos1 - pos); n == 0 { n = int(pos1 - pos)
// nothing more to write
err1 = nil
}
} }
if n > 0 { if n > 0 {
pos += int64(n) pos += int64(n)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment