
D front-end changes: - Import latest fixes to mainline. D runtime changes: - Import latest fixes to mainline. Phobos changes: - Import latest fixes to mainline. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 4c18eed967. * d-diagnostic.cc (verrorReport): Update for new front-end interface. (verrorReportSupplemental): Likewise. * d-lang.cc (d_init_options): Likewise. (d_handle_option): Likewise. (d_post_options): Likewise. (d_parse_file): Likewise. * decl.cc (get_symbol_decl): Likewise. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime 4c18eed967. * src/MERGE: Merge upstream phobos d945686a4.
234 lines
5.6 KiB
D
234 lines
5.6 KiB
D
/**
|
|
* 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);
|