Browse Source

dns: handle early eof in tcp fallback

A zero returned from recvmsg is currently treated as if some data were
received, so if a DNS server closes its TCP socket before sending the
full answer, __res_msend_rc will spin until the timeout elapses because
POLLIN event will be reported on each poll. Fix this by treating an
early EOF as an error.
master
Alexey Izbyshev 3 years ago
committed by Rich Felker
parent
commit
bec42ef393
  1. 2
      src/network/res_msend.c

2
src/network/res_msend.c

@ -287,7 +287,7 @@ int __res_msend_rc(int nqueries, const unsigned char *const *queries,
};
step_mh(&mh, apos[i]);
r = recvmsg(pfd[i].fd, &mh, 0);
if (r < 0) goto out;
if (r <= 0) goto out;
apos[i] += r;
if (apos[i] < 2) continue;
int alen = alen_buf[i][0]*256 + alen_buf[i][1];

Loading…
Cancel
Save