see https://pkg.go.dev/github.com/mailru/easygo/netpoll for details
Package netpoll provides a portable interface for network I/O event notification facility.
Its API is intended for monitoring multiple file descriptors to see if I/O is possible on any of them. It supports edge-triggered and level-triggered interfaces.
To get more info you could look at operating system API documentation of particular netpoll implementations:
- epoll on linux;
- kqueue on bsd;
The Handle function creates netpoll.Desc for further use in Poller's methods:
desc, err := netpoll.Handle(conn, netpoll.EventRead | netpoll.EventEdgeTriggered)
if err != nil {
// handle error
}
The Poller describes os-dependent network poller:
poller, err := netpoll.New(nil)
if err != nil {
// handle error
}
// Get netpoll descriptor with EventRead|EventEdgeTriggered.
desc := netpoll.Must(netpoll.HandleRead(conn))
poller.Start(desc, func(ev netpoll.Event) {
if ev&netpoll.EventReadHup != 0 {
poller.Stop(desc)
conn.Close()
return
}
_, err := ioutil.ReadAll(conn)
if err != nil {
// handle error
}
})
Currently, Poller is implemented only for Linux.