...
Source file src/net/sendfile_windows.go
1
2
3
4
5 package net
6
7 import (
8 "internal/poll"
9 "io"
10 "os"
11 "syscall"
12 )
13
14
15
16
17
18
19
20
21
22
23 func sendFile(fd *netFD, r io.Reader) (written int64, err error, handled bool) {
24 var n int64 = 0
25
26 lr, ok := r.(*io.LimitedReader)
27 if ok {
28 n, r = lr.N, lr.R
29 if n <= 0 {
30 return 0, nil, true
31 }
32 }
33 f, ok := r.(*os.File)
34 if !ok {
35 return 0, nil, false
36 }
37
38 done, err := poll.SendFile(&fd.pfd, syscall.Handle(f.Fd()), n)
39
40 if err != nil {
41 return 0, wrapSyscallError("transmitfile", err), false
42 }
43 if lr != nil {
44 lr.N -= int64(done)
45 }
46 return int64(done), nil, true
47 }
48
View as plain text