47 lines
1.1 KiB
C
47 lines
1.1 KiB
C
|
|
#include "utils.h"
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
void fatal(const gchar* msg) {
|
|
fprintf(stderr, "%s\n", msg);
|
|
abort();
|
|
}
|
|
|
|
void fd_init(int fd) {
|
|
#ifdef _WIN32
|
|
int i = 1;
|
|
#endif
|
|
#ifdef FD_CLOEXEC
|
|
/* close fd on exec (cgi) */
|
|
fcntl(fd, F_SETFD, FD_CLOEXEC);
|
|
#endif
|
|
#ifdef O_NONBLOCK
|
|
fcntl(fd, F_SETFL, O_NONBLOCK | O_RDWR);
|
|
#elif defined _WIN32
|
|
ioctlsocket(fd, FIONBIO, &i);
|
|
#endif
|
|
}
|
|
|
|
void ev_io_add_events(struct ev_loop *loop, ev_io *watcher, int events) {
|
|
if ((watcher->events & events) == events) return;
|
|
ev_io_stop(loop, watcher);
|
|
ev_io_set(watcher, watcher->fd, watcher->events | events);
|
|
ev_io_start(loop, watcher);
|
|
}
|
|
|
|
void ev_io_rem_events(struct ev_loop *loop, ev_io *watcher, int events) {
|
|
if (0 == (watcher->events & events)) return;
|
|
ev_io_stop(loop, watcher);
|
|
ev_io_set(watcher, watcher->fd, watcher->events & ~events);
|
|
ev_io_start(loop, watcher);
|
|
}
|
|
|
|
void ev_io_set_events(struct ev_loop *loop, ev_io *watcher, int events) {
|
|
if (events == (watcher->events & (EV_READ | EV_WRITE))) return;
|
|
ev_io_stop(loop, watcher);
|
|
ev_io_set(watcher, watcher->fd, (watcher->events & ~(EV_READ | EV_WRITE)) | events);
|
|
ev_io_start(loop, watcher);
|
|
}
|