// Copyright 2011 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package pollimport// maxSendfileSize is the largest chunk size we ask the kernel to copy// at a time.constmaxSendfileSizeint = 4 << 20// SendFile wraps the sendfile system call.func ( *FD, int, int64) (int64, error, bool) {if := .writeLock(); != nil {return0, , false }defer .writeUnlock()if := .pd.prepareWrite(.isFile); != nil {return0, , false } := .Sysfdvar (int64error = true )for > 0 { := maxSendfileSizeifint64() > { = int() } , := syscall.Sendfile(, , nil, )if > 0 { += int64() -= int64() } elseif == 0 && == nil {break }if == syscall.EINTR {continue }if == syscall.EAGAIN {if = .pd.waitWrite(.isFile); == nil {continue } }if != nil {// This includes syscall.ENOSYS (no kernel // support) and syscall.EINVAL (fd types which // don't implement sendfile) = = falsebreak } }return , , }
The pages are generated with Goldsv0.6.7. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds.