1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29 #pragma once 30 31 /** 32 * @file sys/epoll.h 33 * @brief I/O event file descriptors. 34 */ 35 36 #include <sys/cdefs.h> 37 #include <sys/types.h> 38 #include <signal.h> /* For sigset_t. */ 39 40 #include <linux/eventpoll.h> 41 42 __BEGIN_DECLS 43 44 /** 45 * [epoll_create(2)](http://man7.org/linux/man-pages/man2/epoll_create.2.html) 46 * creates a new [epoll](http://man7.org/linux/man-pages/man7/epoll.7.html) 47 * file descriptor. 48 * 49 * Returns a new file descriptor on success and returns -1 and sets `errno` on 50 * failure. 51 */ 52 int epoll_create(int __size); 53 54 /** 55 * [epoll_create1(2)](http://man7.org/linux/man-pages/man2/epoll_create1.2.html) 56 * creates a new [epoll](http://man7.org/linux/man-pages/man7/epoll.7.html) 57 * file descriptor with the given flags. 58 * 59 * Returns a new file descriptor on success and returns -1 and sets `errno` on 60 * failure. 61 */ 62 int epoll_create1(int __flags); 63 64 /** 65 * [epoll_ctl(2)](http://man7.org/linux/man-pages/man2/epoll_ctl.2.html) 66 * adds/modifies/removes file descriptors from the given epoll file descriptor. 67 * 68 * Returns 0 on success and returns -1 and sets `errno` on failure. 69 */ 70 int epoll_ctl(int __epoll_fd, int __op, int __fd, struct epoll_event* __BIONIC_COMPLICATED_NULLNESS __event); 71 72 /** 73 * [epoll_wait(2)](http://man7.org/linux/man-pages/man2/epoll_wait.2.html) 74 * waits for an event on the given epoll file descriptor. 75 * 76 * Returns the number of ready file descriptors on success, 0 on timeout, 77 * or -1 and sets `errno` on failure. 78 */ 79 int epoll_wait(int __epoll_fd, struct epoll_event* _Nonnull __events, int __event_count, int __timeout_ms); 80 81 /** 82 * Like epoll_wait() but atomically applying the given signal mask. 83 */ 84 int epoll_pwait(int __epoll_fd, struct epoll_event* _Nonnull __events, int __event_count, int __timeout_ms, const sigset_t* _Nullable __mask); 85 86 /** 87 * Like epoll_pwait() but using a 64-bit signal mask even on 32-bit systems. 88 * 89 * Available since API level 28. 90 */ 91 int epoll_pwait64(int __epoll_fd, struct epoll_event* _Nonnull __events, int __event_count, int __timeout_ms, const sigset64_t* _Nullable __mask) __INTRODUCED_IN(28); 92 93 /** 94 * Like epoll_pwait() but with a `struct timespec` timeout, for nanosecond resolution. 95 * 96 * Available since API level 35. 97 */ 98 int epoll_pwait2(int __epoll_fd, struct epoll_event* _Nonnull __events, int __event_count, const struct timespec* _Nullable __timeout, const sigset_t* _Nullable __mask) __INTRODUCED_IN(35); 99 100 /** 101 * Like epoll_pwait2() but using a 64-bit signal mask even on 32-bit systems. 102 * 103 * Available since API level 35. 104 */ 105 int epoll_pwait2_64(int __epoll_fd, struct epoll_event* _Nonnull __events, int __event_count, const struct timespec* _Nullable __timeout, const sigset64_t* _Nullable __mask) __INTRODUCED_IN(35); 106 107 __END_DECLS 108