Skip to content
This repository has been archived by the owner on Oct 12, 2022. It is now read-only.

Commit

Permalink
Interface to the Linux epoll interface
Browse files Browse the repository at this point in the history
  • Loading branch information
adil authored and adil committed Sep 12, 2012
1 parent d64555f commit 2821660
Showing 1 changed file with 64 additions and 0 deletions.
64 changes: 64 additions & 0 deletions src/core/sys/linux/epoll.d
@@ -0,0 +1,64 @@
/**
* 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)
*/

version (Linux):

extern (C):
@system:
nothrow:

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
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.
}

struct epoll_event
{
uint events;
epoll_data_t data;
};

union epoll_data_t
{
void *ptr;
int fd;
uint u32;
ulong u64;
};

int epoll_create (int size);
int epoll_create1 (int flags);
int epoll_ctl (int epfd, int op, int fd, epoll_event *event);
int epoll_wait (int epfd, epoll_event *events, int maxevents, int timeout);

0 comments on commit 2821660

Please sign in to comment.