On dragonfly, freebsd and solaris the sendfile syscall does not update
the read position of the source fd. Update it after sendfile so
successive calls start at the correct position.
Fixes #25809
Change-Id: Iaac79f89704b75b8038d4bb60eaf793a262cdd8f
Reviewed-on: https://go-review.googlesource.com/117895
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
"fmt"
"io"
"os"
- "runtime"
"testing"
)
}
func TestSendfileParts(t *testing.T) {
- switch runtime.GOOS {
- case "dragonfly", "freebsd", "solaris":
- t.Skipf("skipping on %s (see golang.org/issue/25809 for details)", runtime.GOOS)
- }
-
ln, err := newLocalListener("tcp")
if err != nil {
t.Fatal(err)
if lr != nil {
lr.N = remain - written
}
+
+ _, err1 := f.Seek(written, io.SeekCurrent)
+ if err1 != nil && err == nil {
+ return written, err1, written > 0
+ }
+
return written, wrapSyscallError("sendfile", err), written > 0
}