netpoll

package
v1.6.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 28, 2021 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// InitPollEventsCap represents the initial capacity of poller event-list.
	InitPollEventsCap = 128
	// MaxPollEventsCap is the maximum limitation of events that the poller can process.
	MaxPollEventsCap = 1024
	// MinPollEventsCap is the minimum limitation of events that the poller can process.
	MinPollEventsCap = 32
	// MaxAsyncTasksAtOneTime is the maximum amount of asynchronous tasks that the event-loop will process at one time.
	MaxAsyncTasksAtOneTime = 256
	// ErrEvents represents exceptional events that are not read/write, like socket being closed,
	// reading/writing from/to a closed socket, etc.
	ErrEvents = unix.EPOLLERR | unix.EPOLLHUP | unix.EPOLLRDHUP
	// OutEvents combines EPOLLOUT event and some exceptional events.
	OutEvents = ErrEvents | unix.EPOLLOUT
	// InEvents combines EPOLLIN/EPOLLPRI events and some exceptional events.
	InEvents = ErrEvents | unix.EPOLLIN | unix.EPOLLPRI
)

Variables

This section is empty.

Functions

func Dup added in v1.3.2

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

Dup is the wrapper for dupCloseOnExec.

func PutPollAttachment added in v1.5.2

func PutPollAttachment(pa *PollAttachment)

PutPollAttachment put an unused PollAttachment back to pool.

Types

type IOEvent added in v1.5.3

type IOEvent = uint32

IOEvent is the integer type of I/O events on Linux.

type PollAttachment added in v1.5.2

type PollAttachment struct {
	FD       int
	Callback PollEventHandler
}

PollAttachment is the user data which is about to be stored in "void *ptr" of epoll_data or "void *udata" of kevent.

func GetPollAttachment added in v1.5.2

func GetPollAttachment() *PollAttachment

GetPollAttachment attempts to get a cached PollAttachment from pool.

type PollEventHandler added in v1.5.2

type PollEventHandler func(int, uint32) error

PollEventHandler is the callback for I/O events notified by the poller.

type Poller

type Poller struct {
	// contains filtered or unexported fields
}

Poller represents a poller which is in charge of monitoring file-descriptors.

func OpenPoller

func OpenPoller() (poller *Poller, err error)

OpenPoller instantiates a poller.

func (*Poller) AddRead

func (p *Poller) AddRead(pa *PollAttachment) error

AddRead registers the given file-descriptor with readable event to the poller.

func (*Poller) AddReadWrite

func (p *Poller) AddReadWrite(pa *PollAttachment) error

AddReadWrite registers the given file-descriptor with readable and writable events to the poller.

func (*Poller) AddWrite

func (p *Poller) AddWrite(pa *PollAttachment) error

AddWrite registers the given file-descriptor with writable event to the poller.

func (*Poller) Close

func (p *Poller) Close() error

Close closes the poller.

func (*Poller) Delete

func (p *Poller) Delete(fd int) error

Delete removes the given file-descriptor from the poller.

func (*Poller) ModRead

func (p *Poller) ModRead(pa *PollAttachment) error

ModRead renews the given file-descriptor with readable event in the poller.

func (*Poller) ModReadWrite

func (p *Poller) ModReadWrite(pa *PollAttachment) error

ModReadWrite renews the given file-descriptor with readable and writable events in the poller.

func (*Poller) Polling

func (p *Poller) Polling(callback func(fd int, ev uint32) error) error

Polling blocks the current goroutine, waiting for network-events.

func (*Poller) Trigger

func (p *Poller) Trigger(fn queue.TaskFunc, arg interface{}) (err error)

Trigger is like UrgentTrigger but it puts task into asyncTaskQueue, call this method when the task is not so urgent, for instance writing data back to the peer.

Note that asyncTaskQueue is a queue with low-priority whose size may grow large and tasks in it may backlog.

func (*Poller) UrgentTrigger added in v1.5.0

func (p *Poller) UrgentTrigger(fn queue.TaskFunc, arg interface{}) (err error)

UrgentTrigger puts task into priorAsyncTaskQueue and wakes up the poller which is waiting for network-events, then the poller will get tasks from priorAsyncTaskQueue and run them.

Note that priorAsyncTaskQueue is a queue with high-priority and its size is expected to be small, so only those urgent tasks should be put into this queue.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL