Skip to content

Commit

Permalink
* resolv/res_send.c (res_queriesmatch): Fix typo in comment.
Browse files Browse the repository at this point in the history
	(send_dg): Rewrite error handling to be more compact and avoid
	double recomputation of timeouts.  Pass MSG_NOSIGNAL to send.
  • Loading branch information
Ulrich Drepper committed May 6, 2006
1 parent 697e162 commit 8e45b1a
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 22 deletions.
4 changes: 4 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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
Expand Down
36 changes: 14 additions & 22 deletions resolv/res_send.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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);
}
Expand All @@ -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;
Expand Down Expand Up @@ -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) {
Expand All @@ -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) {
/*
Expand Down Expand Up @@ -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. */
Expand Down

0 comments on commit 8e45b1a

Please sign in to comment.