diff --git a/src/dnsmasq.c b/src/dnsmasq.c index 48e402f..85e28df 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -2091,11 +2091,11 @@ int swap_to_tcp(struct frec *forward, time_t now, int status, struct dns_header if (daemon->tcp_pids[i] == 0 && daemon->tcp_pipes[i] == -1) break; - /* No slots */ - if (i < 0) - return STAT_ABANDONED; - - if (pipe(pipefd) == 0 && (p = fork()) != 0) + /* No slots or no pipe */ + if (i < 0 || pipe(pipefd) != 0) + return STAT_ABANDONED;` + + if ((p = fork()) != 0) { close(pipefd[1]); /* parent needs read pipe end. */ if (p == -1) diff --git a/src/util.c b/src/util.c index 76cfdf5..ffed03b 100644 --- a/src/util.c +++ b/src/util.c @@ -767,8 +767,8 @@ int retry_send(ssize_t rc) /* rw = 0 -> write rw = 1 -> read - rw = 2 -> read once - rw = 3 -> write once + rw = 2 -> write once + rw = 3 -> read once "once" fail if all the data doesn't arrive/go in a single read/write. This indicates a timeout of a TCP socket.