// 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) {if := .writeLock(); != nil {return0, }defer .writeUnlock()if := .pd.prepareWrite(.isFile); != nil {return0, } := .Sysfdvarint64varerrorfor > 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) = break } }return , }
The pages are generated with Goldsv0.4.9. (GOOS=linux GOARCH=amd64)