diff options
Diffstat (limited to 'src/server/signal.c')
-rw-r--r-- | src/server/signal.c | 52 |
1 files changed, 0 insertions, 52 deletions
diff --git a/src/server/signal.c b/src/server/signal.c deleted file mode 100644 index a0697f8..0000000 --- a/src/server/signal.c +++ /dev/null @@ -1,52 +0,0 @@ -#include "signal.h" -#include <sys/eventfd.h> -#include <poll.h> -#include <inttypes.h> -#include <errno.h> -#include <unistd.h> - -int signal_new() -{ - return eventfd( 0, EFD_NONBLOCK ); -} - -int signal_newBlocking() -{ - return eventfd( 0, 0 ); -} - -int signal_call(int signalFd) -{ - if ( signalFd < 0 ) return 0; - static uint64_t one = 1; - return write( signalFd, &one, sizeof one ) == sizeof one; -} - -int signal_wait(int signalFd, int timeoutMs) -{ - struct pollfd ps = { - .fd = signalFd, - .events = POLLIN - }; - int ret = poll( &ps, 1, timeoutMs ); - if ( ret == 0 ) return SIGNAL_TIMEOUT; - if ( ret == -1 ) return SIGNAL_ERROR; - if ( ps.revents & ( POLLERR | POLLNVAL ) ) return SIGNAL_ERROR; - return signal_clear( signalFd ); -} - -int signal_clear(int signalFd) -{ - uint64_t ret; - if ( read( signalFd, &ret, sizeof ret ) != sizeof ret ) { - if ( errno == EAGAIN ) return 0; - return SIGNAL_ERROR; - } - return (int)ret; -} - -void signal_close(int signalFd) -{ - close( signalFd ); -} - |