1 #define _XOPEN_SOURCE 600
12 #define EPOLLRDHUP 0x2000
18 /* Allocate disk space.
19 * Expects fd's offset to be 0; may also reset fd's offset to 0.
20 * Returns 0 on success, and a positive errno otherwise. */
22 rawfalloc(int fd
, int len
)
24 return ftruncate(fd
, len
);
31 epfd
= epoll_create(1);
33 twarn("epoll_create");
41 sockwant(Socket
*s
, int rw
)
44 struct epoll_event ev
= {};
46 if (!s
->added
&& !rw
) {
48 } else if (!s
->added
&& rw
) {
65 ev
.events
|= EPOLLRDHUP
| EPOLLPRI
;
68 return epoll_ctl(epfd
, op
, s
->fd
, &ev
);
73 socknext(Socket
**s
, int64 timeout
)
76 struct epoll_event ev
;
78 r
= epoll_wait(epfd
, &ev
, 1, (int)(timeout
/1000000));
79 if (r
== -1 && errno
!= EINTR
) {
86 if (ev
.events
& (EPOLLHUP
|EPOLLRDHUP
)) {
88 } else if (ev
.events
& EPOLLIN
) {
90 } else if (ev
.events
& EPOLLOUT
) {