Source file
src/net/fd_posix.go
Documentation: net
1
2
3
4
5
6
7
8 package net
9
10 import (
11 "internal/poll"
12 "runtime"
13 "syscall"
14 "time"
15 )
16
17
18 type netFD struct {
19 pfd poll.FD
20
21
22 family int
23 sotype int
24 isConnected bool
25 net string
26 laddr Addr
27 raddr Addr
28 }
29
30 func (fd *netFD) setAddr(laddr, raddr Addr) {
31 fd.laddr = laddr
32 fd.raddr = raddr
33 runtime.SetFinalizer(fd, (*netFD).Close)
34 }
35
36 func (fd *netFD) Close() error {
37 runtime.SetFinalizer(fd, nil)
38 return fd.pfd.Close()
39 }
40
41 func (fd *netFD) shutdown(how int) error {
42 err := fd.pfd.Shutdown(how)
43 runtime.KeepAlive(fd)
44 return wrapSyscallError("shutdown", err)
45 }
46
47 func (fd *netFD) closeRead() error {
48 return fd.shutdown(syscall.SHUT_RD)
49 }
50
51 func (fd *netFD) closeWrite() error {
52 return fd.shutdown(syscall.SHUT_WR)
53 }
54
55 func (fd *netFD) Read(p []byte) (n int, err error) {
56 n, err = fd.pfd.Read(p)
57 runtime.KeepAlive(fd)
58 return n, wrapSyscallError(readSyscallName, err)
59 }
60
61 func (fd *netFD) readFrom(p []byte) (n int, sa syscall.Sockaddr, err error) {
62 n, sa, err = fd.pfd.ReadFrom(p)
63 runtime.KeepAlive(fd)
64 return n, sa, wrapSyscallError(readFromSyscallName, err)
65 }
66
67 func (fd *netFD) readMsg(p []byte, oob []byte, flags int) (n, oobn, retflags int, sa syscall.Sockaddr, err error) {
68 n, oobn, retflags, sa, err = fd.pfd.ReadMsg(p, oob, flags)
69 runtime.KeepAlive(fd)
70 return n, oobn, retflags, sa, wrapSyscallError(readMsgSyscallName, err)
71 }
72
73 func (fd *netFD) Write(p []byte) (nn int, err error) {
74 nn, err = fd.pfd.Write(p)
75 runtime.KeepAlive(fd)
76 return nn, wrapSyscallError(writeSyscallName, err)
77 }
78
79 func (fd *netFD) writeTo(p []byte, sa syscall.Sockaddr) (n int, err error) {
80 n, err = fd.pfd.WriteTo(p, sa)
81 runtime.KeepAlive(fd)
82 return n, wrapSyscallError(writeToSyscallName, err)
83 }
84
85 func (fd *netFD) writeMsg(p []byte, oob []byte, sa syscall.Sockaddr) (n int, oobn int, err error) {
86 n, oobn, err = fd.pfd.WriteMsg(p, oob, sa)
87 runtime.KeepAlive(fd)
88 return n, oobn, wrapSyscallError(writeMsgSyscallName, err)
89 }
90
91 func (fd *netFD) SetDeadline(t time.Time) error {
92 return fd.pfd.SetDeadline(t)
93 }
94
95 func (fd *netFD) SetReadDeadline(t time.Time) error {
96 return fd.pfd.SetReadDeadline(t)
97 }
98
99 func (fd *netFD) SetWriteDeadline(t time.Time) error {
100 return fd.pfd.SetWriteDeadline(t)
101 }
102
View as plain text