1 /** 2 * @file epoll.c epoll specific routines 3 * 4 * Copyright (C) 2010 Creytiv.com 5 */ 6 #include <unistd.h> 7 #include <sys/epoll.h> 8 #include <re_types.h> 9 #include <re_mbuf.h> 10 #include <re_sys.h> 11 #include "main.h" 12 13 14 #define DEBUG_MODULE "epoll" 15 #define DEBUG_LEVEL 5 16 #include <re_dbg.h> 17 18 19 /** 20 * Check for working epoll() kernel support 21 * 22 * @return true if support, false if not 23 */ 24 bool epoll_check(void) 25 { 26 uint32_t osrel; 27 int err, epfd; 28 29 err = sys_rel_get(&osrel, NULL, NULL, NULL); 30 if (err) 31 return false; 32 33 if (osrel < 0x020542) { 34 DEBUG_INFO("epoll not supported in osrel=0x%08x\n", osrel); 35 return false; 36 } 37 38 #ifdef OPENWRT 39 /* epoll is working again with 2.6.25.7 */ 40 if (osrel < 0x020619) { 41 DEBUG_NOTICE("epoll is broken in osrel=0x%08x\n", osrel); 42 return false; 43 } 44 #endif 45 46 epfd = epoll_create(64); 47 if (-1 == epfd) { 48 DEBUG_NOTICE("epoll_create: %m\n", errno); 49 return false; 50 } 51 52 (void)close(epfd); 53 54 return true; 55 } 56