Commit 83c605fb authored by Andrei Tudor Călin's avatar Andrei Tudor Călin Committed by Ian Lance Taylor

internal/poll: improve Splice comments

Clarify the behavior of splice on older kernels, merge comments so
control flow becomes more obvious, as discussed in CL 133575.

Change-Id: I95855991bd0b1fa1c78a900b39c4382f65d83468
Reviewed-on: https://go-review.googlesource.com/135436Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
parent fb061b5e
......@@ -39,15 +39,18 @@ func Splice(dst, src *FD, remain int64) (written int64, handled bool, sc string,
max = int(remain)
}
inPipe, err = spliceDrain(pwfd, src, max)
// the operation is considered handled if splice returns no error, or
// an error other than EINVAL. An EINVAL means the kernel does not
// support splice for the socket type of dst and/or src. The failed
// syscall does not consume any data so it is safe to fall back to a
// generic copy.
handled = handled || (err != syscall.EINVAL)
// The operation is considered handled if splice returns no
// error, or an error other than EINVAL. An EINVAL means the
// kernel does not support splice for the socket type of src.
// The failed syscall does not consume any data so it is safe
// to fall back to a generic copy.
//
// spliceDrain should never return EAGAIN, so if err != nil,
// Splice cannot continue. If inPipe == 0 && err == nil,
// src is at EOF, and the transfer is complete.
// Splice cannot continue.
//
// If inPipe == 0 && err == nil, src is at EOF, and the
// transfer is complete.
handled = handled || (err != syscall.EINVAL)
if err != nil || (inPipe == 0 && err == nil) {
break
}
......
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