From d3ce23c73b870496b2ea388f9c83abc6e7bb4688 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Wed, 27 May 2009 22:27:25 +0200 Subject: [PATCH] Handle EINTR in epoll --- src/iop.c | 2 +- src/proto_inet.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/iop.c b/src/iop.c index 7b90c50..f6dca49 100644 --- a/src/iop.c +++ b/src/iop.c @@ -524,7 +524,7 @@ void *forb_iop_receiver_thread(void *arg) &c->buffer[c->wptr], c->wptr_max - c->wptr); if (rcvd < 0) { - ul_logmsg("recv returned error %d\n", rcvd); + ul_logerr("recv returned error %d (%s), exiting\n", rcvd, strerror(errno)); return NULL; } c->wptr += rcvd; diff --git a/src/proto_inet.c b/src/proto_inet.c index 1da3605..3281aed 100644 --- a/src/proto_inet.c +++ b/src/proto_inet.c @@ -313,6 +313,8 @@ inet_recv(forb_port_t *port, void *buf, size_t len) for (;;) { if (iport->last_recv_fd == -1) { nfds = epoll_wait(iport->epoll_fd, &ev, 1, -1); + if (nfds == -1 && errno == EINTR) + continue; if (nfds < 1) return -1; if (ev.data.fd == iport->listen_socket) { -- 2.39.2