// 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 net

import (
	
	
	
)

// sendFile copies the contents of r to c using the sendfile
// system call to minimize copies.
//
// if handled == true, sendFile returns the number of bytes copied and any
// non-EOF error.
//
// if handled == false, sendFile performed no work.
func sendFile( *netFD,  io.Reader) ( int64,  error,  bool) {
	var  int64 = 1 << 62 // by default, copy until EOF

	,  := .(*io.LimitedReader)
	if  {
		,  = .N, .R
		if  <= 0 {
			return 0, nil, true
		}
	}
	,  := .(*os.File)
	if ! {
		return 0, nil, false
	}

	,  := .SyscallConn()
	if  != nil {
		return 0, nil, false
	}

	var  error
	 = .Read(func( uintptr) bool {
		,  = poll.SendFile(&.pfd, int(), )
		return true
	})
	if  == nil {
		 = 
	}

	if  != nil {
		.N =  - 
	}
	return , wrapSyscallError("sendfile", ),  > 0
}