Package poll


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.


Package files

fd.go fd_mutex.go fd_poll_runtime.go fd_posix.go fd_unix.go hook_cloexec.go hook_unix.go sendfile_linux.go sock_cloexec.go sockopt.go sockopt_linux.go sockopt_unix.go sockoptip.go splice_linux.go writev.go


Accept4Func is used to hook the accept4 call.

var Accept4Func func(int, int) (int, syscall.Sockaddr, error) = syscall.Accept4

AcceptFunc is used to hook the accept call.

var AcceptFunc func(int) (int, syscall.Sockaddr, error) = syscall.Accept

CloseFunc is used to hook the close call.

var CloseFunc func(int) error = syscall.Close

ErrFileClosing is returned when a file descriptor is used after it has been closed.

var ErrFileClosing = errors.New("use of closed file")

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 ErrNetClosing = errors.New("use of closed network connection")

ErrNoDeadline is returned when a request is made to set a deadline on a file type that does not use the poller.

var ErrNoDeadline = errors.New("file type does not support deadline")

ErrTimeout is returned for an expired deadline.

var ErrTimeout error = &TimeoutError{}

TestHookDidWritev is a hook for testing writev.

var TestHookDidWritev = func(wrote int) {}

func DupCloseOnExecSource

func DupCloseOnExec(fd int) (int, string, error)

DupCloseOnExec dups fd and marks it close-on-exec.

func PollDescriptorSource

func PollDescriptor() uintptr

PollDescriptor returns the descriptor being used by the poller, or ^uintptr(0) if there isn't one. This is only used for testing.

func SendFileSource

func SendFile(dstFD *FD, src int, remain int64) (int64, error)

SendFile wraps the sendfile system call.

func SpliceSource

func Splice(dst, src *FD, remain int64) (written int64, handled bool, sc string, err error)

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.

type FDSource

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.

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
        // contains filtered or unexported fields

func (*FD) AcceptSource

func (fd *FD) Accept() (int, syscall.Sockaddr, string, error)

Accept wraps the accept network call.

func (*FD) CloseSource

func (fd *FD) Close() error

Close closes the FD. The underlying file descriptor is closed by the destroy method when there are no remaining references.

func (*FD) DupSource

func (fd *FD) Dup() (int, string, error)

Dup duplicates the file descriptor.

func (*FD) FchdirSource

func (fd *FD) Fchdir() error

Fchdir wraps syscall.Fchdir.

func (*FD) FchmodSource

func (fd *FD) Fchmod(mode uint32) error

Fchmod wraps syscall.Fchmod.

func (*FD) FchownSource

func (fd *FD) Fchown(uid, gid int) error

Fchown wraps syscall.Fchown.

func (*FD) FstatSource

func (fd *FD) Fstat(s *syscall.Stat_t) error

Fstat wraps syscall.Fstat

func (*FD) FsyncSource

func (fd *FD) Fsync() error

Fsync wraps syscall.Fsync.

func (*FD) FtruncateSource

func (fd *FD) Ftruncate(size int64) error

Ftruncate wraps syscall.Ftruncate.

func (*FD) InitSource

func (fd *FD) Init(net string, pollable bool) error

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.

func (*FD) PreadSource

func (fd *FD) Pread(p []byte, off int64) (int, error)

Pread wraps the pread system call.

func (*FD) PwriteSource

func (fd *FD) Pwrite(p []byte, off int64) (int, error)

Pwrite wraps the pwrite system call.

func (*FD) RawControlSource

func (fd *FD) RawControl(f func(uintptr)) error

RawControl invokes the user-defined function f for a non-IO operation.

func (*FD) RawReadSource

func (fd *FD) RawRead(f func(uintptr) bool) error

RawRead invokes the user-defined function f for a read operation.

func (*FD) RawWriteSource

func (fd *FD) RawWrite(f func(uintptr) bool) error

RawWrite invokes the user-defined function f for a write operation.

func (*FD) ReadSource

func (fd *FD) Read(p []byte) (int, error)

Read implements io.Reader.

func (*FD) ReadDirentSource

func (fd *FD) ReadDirent(buf []byte) (int, error)

ReadDirent wraps syscall.ReadDirent. We treat this like an ordinary system call rather than a call that tries to fill the buffer.

func (*FD) ReadFromSource

func (fd *FD) ReadFrom(p []byte) (int, syscall.Sockaddr, error)

ReadFrom wraps the recvfrom network call.

func (*FD) ReadMsgSource

func (fd *FD) ReadMsg(p []byte, oob []byte) (int, int, int, syscall.Sockaddr, error)

ReadMsg wraps the recvmsg network call.

func (*FD) SeekSource

func (fd *FD) Seek(offset int64, whence int) (int64, error)

Seek wraps syscall.Seek.

func (*FD) SetBlockingSource

func (fd *FD) SetBlocking() error

SetBlocking puts the file into blocking mode.

func (*FD) SetDeadlineSource

func (fd *FD) SetDeadline(t time.Time) error

SetDeadline sets the read and write deadlines associated with fd.

func (*FD) SetReadDeadlineSource

func (fd *FD) SetReadDeadline(t time.Time) error

SetReadDeadline sets the read deadline associated with fd.

func (*FD) SetWriteDeadlineSource

func (fd *FD) SetWriteDeadline(t time.Time) error

SetWriteDeadline sets the write deadline associated with fd.

func (*FD) SetsockoptByteSource

func (fd *FD) SetsockoptByte(level, name int, arg byte) error

SetsockoptByte wraps the setsockopt network call with a byte argument.

func (*FD) SetsockoptIPMreqSource

func (fd *FD) SetsockoptIPMreq(level, name int, mreq *syscall.IPMreq) error

SetsockoptIPMreq wraps the setsockopt network call with an IPMreq argument.

func (*FD) SetsockoptIPMreqnSource

func (fd *FD) SetsockoptIPMreqn(level, name int, mreq *syscall.IPMreqn) error

SetsockoptIPMreqn wraps the setsockopt network call with an IPMreqn argument.

func (*FD) SetsockoptIPv6MreqSource

func (fd *FD) SetsockoptIPv6Mreq(level, name int, mreq *syscall.IPv6Mreq) error

SetsockoptIPv6Mreq wraps the setsockopt network call with an IPv6Mreq argument.

func (*FD) SetsockoptInet4AddrSource

func (fd *FD) SetsockoptInet4Addr(level, name int, arg [4]byte) error

SetsockoptInet4Addr wraps the setsockopt network call with an IPv4 address.

func (*FD) SetsockoptIntSource

func (fd *FD) SetsockoptInt(level, name, arg int) error

SetsockoptInt wraps the setsockopt network call with an int argument.

func (*FD) SetsockoptLingerSource

func (fd *FD) SetsockoptLinger(level, name int, l *syscall.Linger) error

SetsockoptLinger wraps the setsockopt network call with a Linger argument.

func (*FD) ShutdownSource

func (fd *FD) Shutdown(how int) error

Shutdown wraps the shutdown network call.

func (*FD) WaitWriteSource

func (fd *FD) WaitWrite() error

WaitWrite waits until data can be read from fd.

func (*FD) WriteSource

func (fd *FD) Write(p []byte) (int, error)

Write implements io.Writer.

func (*FD) WriteMsgSource

func (fd *FD) WriteMsg(p []byte, oob []byte, sa syscall.Sockaddr) (int, int, error)

WriteMsg wraps the sendmsg network call.

func (*FD) WriteOnceSource

func (fd *FD) WriteOnce(p []byte) (int, error)

WriteOnce is for testing only. It makes a single write call.

func (*FD) WriteToSource

func (fd *FD) WriteTo(p []byte, sa syscall.Sockaddr) (int, error)

WriteTo wraps the sendto network call.

func (*FD) WritevSource

func (fd *FD) Writev(v *[][]byte) (int64, error)

Writev wraps the writev system call.

type TimeoutErrorSource

TimeoutError is returned for an expired deadline.

type TimeoutError struct{}

func (*TimeoutError) ErrorSource

func (e *TimeoutError) Error() string

Implement the net.Error interface.

func (*TimeoutError) TemporarySource

func (e *TimeoutError) Temporary() bool

func (*TimeoutError) TimeoutSource

func (e *TimeoutError) Timeout() bool

© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.