Documentation ¶
Overview ¶
Package poll supports non-blocking I/O on file descriptors with polling. This supports I/O operations that block only a goroutine, not a thread. This is used by the net and os packages. It uses a poller built into the runtime, with support from the runtime scheduler.
Index ¶
- Variables
- func DupCloseOnExec(fd int) (int, string, error)
- func IsPollDescriptor(fd uintptr) bool
- func SendFile(dstFD *FD, src int, remain int64) (int64, error)
- func Splice(dst, src *FD, remain int64) (written int64, handled bool, sc string, err error)
- type FD
- func (fd *FD) Accept() (int, syscall.Sockaddr, string, error)
- func (fd *FD) Close() error
- func (fd *FD) Dup() (int, string, error)
- func (fd *FD) Fchdir() error
- func (fd *FD) Fchmod(mode uint32) error
- func (fd *FD) Fchown(uid, gid int) error
- func (fd *FD) Fstat(s *syscall.Stat_t) error
- func (fd *FD) Fsync() error
- func (fd *FD) Ftruncate(size int64) error
- func (fd *FD) Init(net string, pollable bool) error
- func (fd *FD) Pread(p []byte, off int64) (int, error)
- func (fd *FD) Pwrite(p []byte, off int64) (int, error)
- func (fd *FD) RawControl(f func(uintptr)) error
- func (fd *FD) RawRead(f func(uintptr) bool) error
- func (fd *FD) RawWrite(f func(uintptr) bool) error
- func (fd *FD) Read(p []byte) (int, error)
- func (fd *FD) ReadDirent(buf []byte) (int, error)
- func (fd *FD) ReadFrom(p []byte) (int, syscall.Sockaddr, error)
- func (fd *FD) ReadMsg(p []byte, oob []byte) (int, int, int, syscall.Sockaddr, error)
- func (fd *FD) Seek(offset int64, whence int) (int64, error)
- func (fd *FD) SetBlocking() error
- func (fd *FD) SetDeadline(t time.Time) error
- func (fd *FD) SetReadDeadline(t time.Time) error
- func (fd *FD) SetWriteDeadline(t time.Time) error
- func (fd *FD) SetsockoptByte(level, name int, arg byte) error
- func (fd *FD) SetsockoptIPMreq(level, name int, mreq *syscall.IPMreq) error
- func (fd *FD) SetsockoptIPMreqn(level, name int, mreq *syscall.IPMreqn) error
- func (fd *FD) SetsockoptIPv6Mreq(level, name int, mreq *syscall.IPv6Mreq) error
- func (fd *FD) SetsockoptInet4Addr(level, name int, arg [4]byte) error
- func (fd *FD) SetsockoptInt(level, name, arg int) error
- func (fd *FD) SetsockoptLinger(level, name int, l *syscall.Linger) error
- func (fd *FD) Shutdown(how int) error
- func (fd *FD) WaitWrite() error
- func (fd *FD) Write(p []byte) (int, error)
- func (fd *FD) WriteMsg(p []byte, oob []byte, sa syscall.Sockaddr) (int, int, error)
- func (fd *FD) WriteOnce(p []byte) (int, error)
- func (fd *FD) WriteTo(p []byte, sa syscall.Sockaddr) (int, error)
- func (fd *FD) Writev(v *[][]byte) (int64, error)
- type TimeoutError
Constants ¶
This section is empty.
Variables ¶
Accept4Func is used to hook the accept4 call.
AcceptFunc is used to hook the accept call.
var CloseFunc func(int) error = syscall.Close
CloseFunc is used to hook the close call.
var ErrFileClosing = errors.New("use of closed file")
ErrFileClosing is returned when a file descriptor is used after it has been closed.
var ErrNetClosing = errors.New("use of closed network connection")
ErrNetClosing is returned when a network descriptor is used after it has been closed. Keep this string consistent because of issue #4373: since historically programs have not been able to detect this error, they look for the string.
var ErrNoDeadline = errors.New("file type does not support deadline")
ErrNoDeadline is returned when a request is made to set a deadline on a file type that does not use the poller.
var ErrTimeout error = &TimeoutError{}
ErrTimeout is returned for an expired deadline.
var TestHookDidWritev = func(wrote int) {}
TestHookDidWritev is a hook for testing writev.
Functions ¶
func DupCloseOnExec ¶
DupCloseOnExec dups fd and marks it close-on-exec. DupCloseOnExec 创建 fd 副本 , 并且设置 CLOEXEC 标志
func IsPollDescriptor ¶
IsPollDescriptor reports whether fd is the descriptor being used by the poller. This is only used for testing. IsPollDescriptor 判读 fd 是否是轮询器正在使用的文件描述符。这仅用于测试。
func Splice ¶
Splice transfers at most remain bytes of data from src to dst, using the splice system call to minimize copies of data from and to userspace.
Splice creates a temporary pipe, to serve as a buffer for the data transfer. src and dst must both be stream-oriented sockets.
If err != nil, sc is the system call which caused the error.
Splice 尽可能多的从 src 到 dst 拷贝数据,使用 splice 系统调用减少来回用户空间的数据拷贝。 Splice 创建一个临时管道,用作数据传输的缓冲区。 src 和 dst 都必须是面向流的套接字 如果 err!= nil,则 sc 是导致错误的系统调用。
Types ¶
type FD ¶
type FD struct { // System file descriptor. Immutable until Close. Sysfd int // 系统文件描述符 // Whether this is a streaming descriptor, as opposed to a // packet-based descriptor like a UDP socket. Immutable. IsStream bool // 是否是数据流 // Whether a zero byte read indicates EOF. This is false for a // message based socket connection. ZeroReadIsEOF bool // 读取到 0 是否表示是 EOF // contains filtered or unexported fields }
FD is a file descriptor. The net and os packages use this type as a field of a larger type representing a network connection or OS file. FD 是文件描述符。 net 和 os 包中大量的类型将此 FD 用作表示网络连接或 OS 文件的字段。
func (*FD) Close ¶
Close closes the FD. The underlying file descriptor is closed by the destroy method when there are no remaining references. Close 关闭 FD , 没有引用时候调用 destroy 函数关闭文件描述符
func (*FD) Init ¶
Init initializes the FD. The Sysfd field should already be set. This can be called multiple times on a single FD. The net argument is a network name from the net package (e.g., "tcp"), or "file". Set pollable to true if fd should be managed by runtime netpoll. Init 初始化 FD 。Sysfd 字段应该已经设置。 可以在单个 FD 上多次调用此命令。 net 参数是网络包中的网络名称(例如 "tcp")或 "file"。 如果 pollable 为 true ,则将 fd 交给运行时 netpoll 管理。
func (*FD) Pread ¶
Pread wraps the pread system call. Pread 包装 pread 系统调用,用于带偏移量地原子的从文件中读取数据,执行后,文件偏移指针不变。
func (*FD) Pwrite ¶
Pwrite wraps the pwrite system call. Pwrite 包装 pwrite 系统调用,用于带偏移量地原子的从文件中读取数据,执行后,文件偏移指针不变。多个线程同时写,可能存在覆盖问题。
func (*FD) RawControl ¶
RawControl invokes the user-defined function f for a non-IO operation. RawControl 为非 IO 操作调用用户定义的函数 f 。
func (*FD) RawRead ¶
RawRead invokes the user-defined function f for a read operation. RawRead 调用用户定义的函数 f 进行读取操作。
func (*FD) RawWrite ¶
RawWrite invokes the user-defined function f for a write operation. RawWrite 调用用户定义的函数 f 进行写入操作。
func (*FD) ReadDirent ¶
ReadDirent wraps syscall.ReadDirent. We treat this like an ordinary system call rather than a call that tries to fill the buffer. ReadFrom 包装 syscall.ReadDirent ,最终调用 getdents64 系统调用 读取目录结构,获取到的 buf 需要解析 ,解析过程可以参考 syscall.ParseDirent
func (*FD) SetBlocking ¶
SetBlocking puts the file into blocking mode. SetBlocking 设置为阻塞模式
func (*FD) SetDeadline ¶
SetDeadline sets the read and write deadlines associated with fd. 设置读写截止时间
func (*FD) SetReadDeadline ¶
SetReadDeadline sets the read deadline associated with fd. 设置读截止时间
func (*FD) SetWriteDeadline ¶
SetWriteDeadline sets the write deadline associated with fd. 设置写截止时间
func (*FD) SetsockoptByte ¶
SetsockoptByte wraps the setsockopt network call with a byte argument.
func (*FD) SetsockoptIPMreq ¶
SetsockoptIPMreq wraps the setsockopt network call with an IPMreq argument.
func (*FD) SetsockoptIPMreqn ¶
SetsockoptIPMreqn wraps the setsockopt network call with an IPMreqn argument.
func (*FD) SetsockoptIPv6Mreq ¶
SetsockoptIPv6Mreq wraps the setsockopt network call with an IPv6Mreq argument.
func (*FD) SetsockoptInet4Addr ¶
SetsockoptInet4Addr wraps the setsockopt network call with an IPv4 address.
func (*FD) SetsockoptInt ¶
SetsockoptInt wraps the setsockopt network call with an int argument.
func (*FD) SetsockoptLinger ¶
SetsockoptLinger wraps the setsockopt network call with a Linger argument.
type TimeoutError ¶
type TimeoutError struct{}
TimeoutError is returned for an expired deadline.
func (*TimeoutError) Error ¶
func (e *TimeoutError) Error() string
Implement the net.Error interface.
func (*TimeoutError) Temporary ¶
func (e *TimeoutError) Temporary() bool
func (*TimeoutError) Timeout ¶
func (e *TimeoutError) Timeout() bool