mirror of
https://github.com/ringabout/wepoll
synced 2026-01-09 07:31:21 +00:00
No description
| src | ||
| tests | ||
| .gitattributes | ||
| LICENSE | ||
| README.md | ||
| wepoll.nimble | ||
wepoll
Windows epoll wrapper based on wepoll
Installation
nimble install wepoll
API
Docs from https://github.com/piscisaureus/wepoll
General remarks
- The epoll port is a
EpollHandle, not a file descriptor. - All functions set both
errnoandGetLastError()on failure. - For more extensive documentation, see the epoll(7) man page, and the per-function man pages that are linked below.
epoll_create/epoll_create1
proc epoll_create*(size: cint): EpollHandle
proc epoll_create1*(flags: cint): EpollHandle
- Create a new epoll instance (port).
sizeis ignored but most be greater than zero.flagsmust be zero as there are no supported flags.- Returns
NULLon failure. - Linux man page
epoll_close
proc epoll_close*(ephnd: EpollHandle): cint
- Close an epoll port.
- Do not attempt to close the epoll port with
close(),CloseHandle()orclosesocket().
epoll_ctl
proc epoll_ctl*(ephnd: EpollHandle, op: cint,
sock: EpollSocket, event: ptr EpollEvent): cint {.wepoll.}
- Control which socket events are monitored by an epoll port.
ephndmust be a EpollHandle created byepoll_create()orepoll_create1().opmust be one ofEPOLL_CTL_ADD,EPOLL_CTL_MOD,EPOLL_CTL_DEL.sockmust be a valid socket created bysocket(),WSASocket(), oraccept().eventshould be a pointer to aEpollEvent.
IfopisEPOLL_CTL_DELthen theeventparameter is ignored, and it may beNULL.- Returns 0 on success, -1 on failure.
- It is recommended to always explicitly remove a socket from its epoll
set using
EPOLL_CTL_DELbefore closing it.
As on Linux, closed sockets are automatically removed from the epoll set, but wepoll may not be able to detect that a socket was closed until the next call toepoll_wait(). - Linux man page
epoll_wait
proc epoll_wait*(ephnd: EpollHandle, events: ptr EpollEvent,
maxevents: cint, timeout: cint): cint {.wepoll.}
- Receive socket events from an epoll port.
eventsshould point to a caller-allocated array ofEpollEventobject, which will receive the reported events.maxeventsis the maximum number of events that will be written to theeventsarray, and must be greater than zero.timeoutspecifies whether to block when no events are immediately available.<0block indefinitely0report any events that are already waiting, but don't block≥1block for at most N milliseconds
- Return value:
-1an error occurred0timed out without any events to report≥1the number of events stored in theeventsbuffer
- Linux man page
object EpollEvent
type
EpollHandle* = pointer
EpollSocket* = culonglong
type
EpollData* {.bycopy, union.} = object
p*: pointer
fd*: cint
u32*: uint32
u64*: uint64
sock*: EpollSocket ## Windows specific
hnd*: EpollHandle ## Windows specific
type
EpollEvent* {.bycopy.} = object
events*: uint32 ## Epoll events and flags
data*: EpollData ## User data variable
- The
eventsfield is a bit mask containing the events being monitored/reported, and optional flags.
Flags are accepted byepoll_ctl(), but they are not reported back byepoll_wait(). - The
datafield can be used to associate application-specific information with a socket; its value will be returned unmodified byepoll_wait(). - Linux man page
| Event | Description |
|---|---|
EPOLLIN |
incoming data available, or incoming connection ready to be accepted |
EPOLLOUT |
ready to send data, or outgoing connection successfully established |
EPOLLRDHUP |
remote peer initiated graceful socket shutdown |
EPOLLPRI |
out-of-band data available for reading |
EPOLLERR |
socket error1 |
EPOLLHUP |
socket hang-up1 |
EPOLLRDNORM |
same as EPOLLIN |
EPOLLRDBAND |
same as EPOLLPRI |
EPOLLWRNORM |
same as EPOLLOUT |
EPOLLWRBAND |
same as EPOLLOUT |
EPOLLMSG |
never reported |
| Flag | Description |
|---|---|
EPOLLONESHOT |
report event(s) only once |
EPOLLET |
not supported by wepoll |
EPOLLEXCLUSIVE |
not supported by wepoll |
EPOLLWAKEUP |
not supported by wepoll |
1: the EPOLLERR and EPOLLHUP events may always be reported by
epoll_wait(), regardless of the event mask that was passed to
epoll_ctl().