1 // Copyright 2011 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
14 // sendFile copies the contents of r to c using the TransmitFile
15 // system call to minimize copies.
17 // if handled == true, sendFile returns the number of bytes copied and any
20 // if handled == false, sendFile performed no work.
22 // Note that sendfile for windows does not support >2GB file.
23 func sendFile(fd
*netFD
, r io
.Reader
) (written
int64, err error
, handled
bool) {
24 var n
int64 = 0 // by default, copy until EOF
26 lr
, ok
:= r
.(*io
.LimitedReader
)
38 done
, err
:= poll
.SendFile(&fd
.pfd
, syscall
.Handle(f
.Fd()), n
)
41 return 0, wrapSyscallError("transmitfile", err
), false
46 return int64(done
), nil, true