Wolfgang Thallergcc 15.1.0ada185d1 year agoHistory
234 lines · 5.6 KB · D
RawDownload
/** * D header file to interface with the Linux epoll API (http://man7.org/linux/man-pages/man7/epoll.7.html). * Available since Linux 2.6 * * Copyright: Copyright Adil Baig 2012. * License : $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) * Authors  : Adil Baig (github.com/adilbaig) */module core.sys.linux.epoll; version (linux): import core.sys.posix.signal : sigset_t; extern (C):@nogc:nothrow: version (ARM)     version = ARM_Any;version (AArch64) version = ARM_Any;version (HPPA)    version = HPPA_Any;version (MIPS32)  version = MIPS_Any;version (MIPS64)  version = MIPS_Any;version (PPC)     version = PPC_Any;version (PPC64)   version = PPC_Any;version (RISCV32) version = RISCV_Any;version (RISCV64) version = RISCV_Any;version (S390)    version = IBMZ_Any;version (SPARC)   version = SPARC_Any;version (SPARC64) version = SPARC_Any;version (SystemZ) version = IBMZ_Any;version (X86)     version = X86_Any;version (X86_64)  version = X86_Any; enum{    EPOLL_CLOEXEC  = 0x80000,    EPOLL_NONBLOCK = 0x800} enum{    EPOLLIN     = 0x001,    EPOLLPRI    = 0x002,    EPOLLOUT    = 0x004,    EPOLLRDNORM = 0x040,    EPOLLRDBAND = 0x080,    EPOLLWRNORM = 0x100,    EPOLLWRBAND = 0x200,    EPOLLMSG    = 0x400,    EPOLLERR    = 0x008,    EPOLLHUP    = 0x010,    EPOLLRDHUP  = 0x2000, // since Linux 2.6.17    EPOLLEXCLUSIVE = 1u << 28, // since Linux 4.5    EPOLLWAKEUP = 1u << 29,    EPOLLONESHOT = 1u << 30,    EPOLLET     = 1u << 31} /** * Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). */enum{    EPOLL_CTL_ADD = 1, /// Add a file descriptor to the interface.    EPOLL_CTL_DEL = 2, /// Remove a file descriptor from the interface.    EPOLL_CTL_MOD = 3, /// Change file descriptor epoll_event structure.} version (X86_Any){    align(1) struct epoll_event    {    align(1):        uint events;        epoll_data_t data;    }}else version (ARM_Any){    struct epoll_event    {        uint events;        epoll_data_t data;    }}else version (PPC_Any){    struct epoll_event    {        uint events;        epoll_data_t data;    }}else version (HPPA_Any){    struct epoll_event    {        uint events;        epoll_data_t data;    }}else version (MIPS_Any){    struct epoll_event    {        uint events;        epoll_data_t data;    }}else version (RISCV_Any){    struct epoll_event    {        uint events;        epoll_data_t data;    }}else version (SPARC_Any){    struct epoll_event    {        uint events;        epoll_data_t data;    }}else version (IBMZ_Any){    struct epoll_event    {        uint events;        epoll_data_t data;    }}else version (LoongArch64){    struct epoll_event    {        uint events;        epoll_data_t data;    }}else{    static assert(false, "Platform not supported");} union epoll_data_t{    void *ptr;    int fd;    uint u32;    ulong u64;} /** * Creates an epoll instance. * * Params: *   size = a hint specifying the number of file descriptors to be associated *          with the new instance.  T * Returns: an fd for the new instance. The fd returned by epoll_create() should *          be closed with close(). * See_also: epoll_create1 (int flags) */int epoll_create (int size); /* Same as epoll_create but with an FLAGS parameter.  The unused SIZE   parameter has been dropped.  */ /** * Creates an epoll instance. * * Params: *   flags = a specified flag. If flags is 0, then, other than the fact that the *           obsolete size argument is dropped, epoll_create1() is the same as *           epoll_create(). * Returns: an fd for the new instance. The fd returned by epoll_create() should *          be closed with close(). * See_also: epoll_create (int size) */int epoll_create1 (int flags); /** * Manipulate an epoll instance * * Params: *   epfd = an epoll file descriptor instance *   op = one of the EPOLL_CTL_* constants *   fd = target file descriptor of the operation *   event = describes which events the caller is interested in and any *           associated user dat * Returns: 0 in case of success, -1 in case of error ( the "errno" variable *          will contain the specific error code ) */int epoll_ctl (int epfd, int op, int fd, epoll_event *event);  /** * Wait for events on an epoll instance. * * * Params: *   epfd = an epoll file descriptor instance *   events = a buffer that will contain triggered events *   maxevents = the maximum number of events to be returned ( usually size of *               "events" ) *   timeout = specifies the maximum wait time in milliseconds (-1 == infinite) * * Returns: the number of triggered events returned in "events" buffer. Or -1 in *          case of error with the "errno" variable set to the specific error *          code. */int epoll_wait (int epfd, epoll_event *events, int maxevents, int timeout); /** * Wait for events on an epoll instance * * * Params: *   epfd = an epoll file descriptor instance *   events = a buffer that will contain triggered events *   maxevents = the maximum number of events to be returned ( usually size of *               "events" ) *   timeout = specifies the maximum wait time in milliseconds (-1 == infinite) *   ss = a signal set. May be specified as `null`, in which case epoll_pwait() is *        equivalent to epoll_wait(). * * Returns: the number of triggered events returned in "events" buffer. Or -1 in *          case of error with the "errno" variable set to the specific error *          code. */int epoll_pwait (int epfd, epoll_event *events, int maxevents, int timeout,    const sigset_t *ss);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t