diff --git a/cangen.c b/cangen.c index 549c8e3..2327064 100644 --- a/cangen.c +++ b/cangen.c @@ -503,8 +503,11 @@ resend: return 1; } if (polltimeout) { + int ret; + /* wait for the write socket (with timeout) */ - if (poll(&fds, 1, polltimeout) < 0) { + ret = poll(&fds, 1, polltimeout); + if (ret == 0 || (ret == -1 && errno != -EINTR)) { perror("poll"); return 1; } diff --git a/cansequence.c b/cansequence.c index 3f22415..78cf5a5 100644 --- a/cansequence.c +++ b/cansequence.c @@ -216,7 +216,7 @@ static void do_send() } err = poll(fds, 1, 1000); - if (err == -1 && errno != -EINTR) { + if (err == 0 || (err == -1 && errno != -EINTR)) { perror("poll()"); exit(EXIT_FAILURE); } diff --git a/j1939cat.c b/j1939cat.c index aced6b9..34a8c03 100644 --- a/j1939cat.c +++ b/j1939cat.c @@ -368,10 +368,12 @@ static int j1939cat_send_loop(struct j1939cat_priv *priv, int out_fd, char *buf, int ret; ret = poll(&fds, 1, priv->polltimeout); - if (ret == -EINTR) - continue; - if (ret < 0) - return -errno; + if (ret == -1) { + if (errno == -EINTR) + continue; + else + return -errno; + } if (!ret) return -ETIME; if (!(fds.revents & events)) { @@ -572,10 +574,12 @@ static int j1939cat_recv(struct j1939cat_priv *priv) int ret; ret = poll(&fds, 1, priv->polltimeout); - if (ret == -EINTR) - continue; - if (ret < 0) - return -errno; + if (ret == -1) { + if (errno == -EINTR) + continue; + else + return -errno; + } if (!ret) continue; if (!(fds.revents & events)) {