mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
* resolv/res_send.c (res_queriesmatch): Fix typo in comment.
(send_dg): Rewrite error handling to be more compact and avoid double recomputation of timeouts. Pass MSG_NOSIGNAL to send.
This commit is contained in:
parent
697e162863
commit
8e45b1acc2
@ -1,5 +1,9 @@
|
||||
2006-05-06 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* resolv/res_send.c (res_queriesmatch): Fix typo in comment.
|
||||
(send_dg): Rewrite error handling to be more compact and avoid
|
||||
double recomputation of timeouts. Pass MSG_NOSIGNAL to send.
|
||||
|
||||
* include/arpa/nameser.h: Add optimizations for NS_GET16 and NS_GET32.
|
||||
|
||||
* resolv/res_send.c (res_nameinquery): Use NS_GET16 directly
|
||||
|
@ -304,7 +304,7 @@ res_queriesmatch(const u_char *buf1, const u_char *eom1,
|
||||
return (1);
|
||||
|
||||
/* Note that we initially do not convert QDCOUNT to the host byte
|
||||
order. We can compare it with the second buffers QDCOUNT
|
||||
order. We can compare it with the second buffer's QDCOUNT
|
||||
value without doing this. */
|
||||
int qdcount = ((HEADER*)buf1)->qdcount;
|
||||
if (qdcount != ((HEADER*)buf2)->qdcount)
|
||||
@ -879,9 +879,12 @@ send_dg(res_state statp,
|
||||
pfd[0].events = POLLOUT;
|
||||
wait:
|
||||
if (need_recompute) {
|
||||
recompute_resend:
|
||||
evNowTime(&now);
|
||||
if (evCmpTime(finish, now) <= 0) {
|
||||
Perror(statp, stderr, "select", errno);
|
||||
poll_err_out:
|
||||
Perror(statp, stderr, "poll", errno);
|
||||
err_out:
|
||||
__res_iclose(statp, false);
|
||||
return (0);
|
||||
}
|
||||
@ -904,26 +907,18 @@ send_dg(res_state statp,
|
||||
return (0);
|
||||
}
|
||||
if (n < 0) {
|
||||
if (errno == EINTR) {
|
||||
recompute_resend:
|
||||
evNowTime(&now);
|
||||
if (evCmpTime(finish, now) > 0) {
|
||||
evSubTime(&timeout, &finish, &now);
|
||||
goto wait;
|
||||
}
|
||||
}
|
||||
Perror(statp, stderr, "poll", errno);
|
||||
__res_iclose(statp, false);
|
||||
return (0);
|
||||
if (errno == EINTR)
|
||||
goto recompute_resend;
|
||||
|
||||
goto poll_err_out;
|
||||
}
|
||||
__set_errno (0);
|
||||
if (pfd[0].revents & POLLOUT) {
|
||||
if (send(pfd[0].fd, (char*)buf, buflen, 0) != buflen) {
|
||||
if (send (pfd[0].fd, buf, buflen, MSG_NOSIGNAL) != buflen) {
|
||||
if (errno == EINTR || errno == EAGAIN)
|
||||
goto recompute_resend;
|
||||
Perror(statp, stderr, "send", errno);
|
||||
__res_iclose(statp, false);
|
||||
return (0);
|
||||
goto err_out;
|
||||
}
|
||||
pfd[0].events = POLLIN;
|
||||
++nwritten;
|
||||
@ -953,8 +948,7 @@ send_dg(res_state statp,
|
||||
goto wait;
|
||||
}
|
||||
Perror(statp, stderr, "recvfrom", errno);
|
||||
__res_iclose(statp, false);
|
||||
return (0);
|
||||
goto err_out;
|
||||
}
|
||||
*gotsomewhere = 1;
|
||||
if (resplen < HFIXEDSZ) {
|
||||
@ -965,8 +959,7 @@ send_dg(res_state statp,
|
||||
(stdout, ";; undersized: %d\n",
|
||||
resplen));
|
||||
*terrno = EMSGSIZE;
|
||||
__res_iclose(statp, false);
|
||||
return (0);
|
||||
goto err_out;
|
||||
}
|
||||
if (hp->id != anhp->id) {
|
||||
/*
|
||||
@ -1044,8 +1037,7 @@ send_dg(res_state statp,
|
||||
return (resplen);
|
||||
} else if (pfd[0].revents & (POLLERR | POLLHUP | POLLNVAL)) {
|
||||
/* Something went wrong. We can stop trying. */
|
||||
__res_iclose(statp, false);
|
||||
return (0);
|
||||
goto err_out;
|
||||
}
|
||||
else {
|
||||
/* poll should not have returned > 0 in this case. */
|
||||
|
Loading…
Reference in New Issue
Block a user