184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo/* Copyright (C) 2002 Free Software Foundation, Inc. 284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo This file is part of the GNU C Library. 384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo The GNU C Library is free software; you can redistribute it and/or 584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo modify it under the terms of the GNU Lesser General Public 684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo License as published by the Free Software Foundation; either 784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo version 2.1 of the License, or (at your option) any later version. 884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo The GNU C Library is distributed in the hope that it will be useful, 1084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo but WITHOUT ANY WARRANTY; without even the implied warranty of 1184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo Lesser General Public License for more details. 1384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 1484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo You should have received a copy of the GNU Lesser General Public 1584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo License along with the GNU C Library; if not, write to the Free 1684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 1784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 02111-1307 USA. */ 1884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 1984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#ifndef _SYS_EPOLL_H 2084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define _SYS_EPOLL_H 1 2184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 2284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#include <stdint.h> 2384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#include <sys/types.h> 2484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 2584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 2684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajoenum EPOLL_EVENTS 2784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo { 2884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo EPOLLIN = 0x001, 2984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLIN EPOLLIN 3084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo EPOLLPRI = 0x002, 3184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLPRI EPOLLPRI 3284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo EPOLLOUT = 0x004, 3384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLOUT EPOLLOUT 3484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo EPOLLRDNORM = 0x040, 3584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLRDNORM EPOLLRDNORM 3684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo EPOLLRDBAND = 0x080, 3784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLRDBAND EPOLLRDBAND 3884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo EPOLLWRNORM = 0x100, 3984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLWRNORM EPOLLWRNORM 4084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo EPOLLWRBAND = 0x200, 4184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLWRBAND EPOLLWRBAND 4284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo EPOLLMSG = 0x400, 4384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLMSG EPOLLMSG 4484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo EPOLLERR = 0x008, 4584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLERR EPOLLERR 4684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo EPOLLHUP = 0x010, 4784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLHUP EPOLLHUP 4884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo EPOLLONESHOT = (1 << 30), 4984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLONESHOT EPOLLONESHOT 5084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo EPOLLET = (1 << 31) 5184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLET EPOLLET 5284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 5384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo }; 5484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 5584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 5684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). */ 5784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLL_CTL_ADD 1 /* Add a file decriptor to the interface. */ 5884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLL_CTL_DEL 2 /* Remove a file decriptor from the interface. */ 5984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLL_CTL_MOD 3 /* Change file decriptor epoll_event structure. */ 6084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 6184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 6237550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman/* 6384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo * On x86-64 make the 64bit structure have the same alignment as the 6484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo * 32bit structure. This makes 32bit emulation easier. 6584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo */ 6684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#ifdef __x86_64__ 6784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLL_PACKED __attribute__((packed)) 6884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#else 6984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLL_PACKED 7084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#endif 7184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 7284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 7384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajotypedef union epoll_data 7484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo{ 7584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo void *ptr; 7684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo int fd; 7784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo uint32_t u32; 7884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo uint64_t u64; 7984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo} epoll_data_t; 8084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 8184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajostruct epoll_event 8284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo{ 8384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo uint32_t events; /* Epoll events */ 8484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo epoll_data_t data; /* User data variable */ 8584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo} EPOLL_PACKED; 8684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 8784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 8884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo__BEGIN_DECLS 8984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 9084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo/* Creates an epoll instance. Returns an fd for the new instance. 9184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo The "size" parameter is a hint specifying the number of file 9284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo descriptors to be associated with the new instance. The fd 9384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo returned by epoll_create() should be closed with close(). */ 9484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajoextern int epoll_create (int __size) __THROW; 9584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 9684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 9784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo/* Manipulate an epoll instance "epfd". Returns 0 in case of success, 9884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo -1 in case of error ( the "errno" variable will contain the 9984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo specific error code ) The "op" parameter is one of the EPOLL_CTL_* 10084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo constants defined above. The "fd" parameter is the target of the 10184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo operation. The "event" parameter describes which events the caller 10284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo is interested in and any associated user data. */ 10384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajoextern int epoll_ctl (int __epfd, int __op, int __fd, 10484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo struct epoll_event *__event) __THROW; 10584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 10684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 10784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo/* Wait for events on an epoll instance "epfd". Returns the number of 10884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo triggered events returned in "events" buffer. Or -1 in case of 10984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo error with the "errno" variable set to the specific error code. The 11084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo "events" parameter is a buffer that will contain triggered 11184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo events. The "maxevents" is the maximum number of events to be 11284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo returned ( usually size of "events" ). The "timeout" parameter 11384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo specifies the maximum wait time in milliseconds (-1 == infinite). */ 11484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajoextern int epoll_wait (int __epfd, struct epoll_event *__events, 11584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo int __maxevents, int __timeout) __THROW; 11684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 11784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo__END_DECLS 11884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo 11984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#endif /* sys/epoll.h */ 120