/* Oh, did we mention that some glibc releases do not even define the
* syscall numbers? */
#if !defined(__NR_epoll_create)
-#if defined(__i386__)
-#define __NR_epoll_create 254
-#define __NR_epoll_ctl 255
-#define __NR_epoll_wait 256
-#elif defined(__ia64__)
+#if defined(__ia64__)
#define __NR_epoll_create 1243
#define __NR_epoll_ctl 1244
#define __NR_epoll_wait 1245
#define __NR_epoll_create 214
#define __NR_epoll_ctl 233
#define __NR_epoll_wait 232
+#elif defined(__sparc64__) || defined(__sparc__)
+#define __NR_epoll_create 193
+#define __NR_epoll_ctl 194
+#define __NR_epoll_wait 195
+#elif defined(__s390__) || defined(__m68k__)
+#define __NR_epoll_create 249
+#define __NR_epoll_ctl 250
+#define __NR_epoll_wait 251
+#elif defined(__ppc64__) || defined(__ppc__)
+#define __NR_epoll_create 236
+#define __NR_epoll_ctl 237
+#define __NR_epoll_wait 238
+#elif defined(__parisc__) || defined(__arm26__) || defined(__arm__)
+#define __NR_epoll_create 224
+#define __NR_epoll_ctl 225
+#define __NR_epoll_wait 226
+#elif defined(__alpha__)
+#define __NR_epoll_create 407
+#define __NR_epoll_ctl 408
+#define __NR_epoll_wait 409
+#elif defined(__sh64__)
+#define __NR_epoll_create 282
+#define __NR_epoll_ctl 283
+#define __NR_epoll_wait 284
+#elif defined(__i386__) || defined(__sh__) || defined(__m32r__) || defined(__h8300__) || defined(__frv__)
+#define __NR_epoll_create 254
+#define __NR_epoll_ctl 255
+#define __NR_epoll_wait 256
#else /* cpu types */
#error No system call numbers defined for epoll family.
#endif /* cpu types */
gen_ref_dec(sock);
continue;
}
- }
-
- switch (s_state(sock)) {
+ } else if (events[i].events & EPOLLHUP) {
+ event_generate(ET_EOF, sock, 0);
+ } else switch (s_state(sock)) {
case SS_CONNECTING:
if (events[i].events & EPOLLOUT) /* connection completed */
event_generate(ET_CONNECT, sock, 0);
case SS_NOTSOCK:
case SS_CONNECTED:
- if (events[i].events & EPOLLIN)
- event_generate((events[i].events & EPOLLHUP) ? ET_EOF : ET_READ, sock, 0);
- if (events[i].events & EPOLLOUT)
- event_generate(ET_WRITE, sock, 0);
- break;
-
case SS_DATAGRAM:
case SS_CONNECTDG:
if (events[i].events & EPOLLIN)
MyFree(events);
}
-/** Descriptor for dpoll event engine. */
+/** Descriptor for epoll event engine. */
struct Engine engine_epoll = {
"epoll()",
engine_init,