summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--resolv/res_send.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/resolv/res_send.c b/resolv/res_send.c
index 968ede09fa..0a28cd784b 100644
--- a/resolv/res_send.c
+++ b/resolv/res_send.c
@@ -1132,22 +1132,23 @@ send_dg(res_state statp,
int ndg = sendmmsg (pfd[0].fd, reqs, 2, MSG_NOSIGNAL);
if (__builtin_expect (ndg == 2, 1))
{
- assert (reqs[0].msg_len == buflen);
- assert (reqs[1].msg_len == buflen2);
+ if (reqs[0].msg_len != buflen
+ || reqs[1].msg_len != buflen2)
+ goto fail_sendmmsg;
pfd[0].events = POLLIN;
nwritten += 2;
}
else if (ndg == 1 && reqs[0].msg_len == buflen)
goto just_one;
- else if (errno == EINTR || errno == EAGAIN)
+ else if (ndg < 0 && (errno == EINTR || errno == EAGAIN))
goto recompute_resend;
else
{
#ifndef __ASSUME_SENDMMSG
- if (have_sendmmsg == 0)
+ if (__builtin_expect (have_sendmmsg == 0, 0))
{
- if (errno == ENOSYS)
+ if (ndg < 0 && errno == ENOSYS)
{
have_sendmmsg = -1;
goto try_send;
@@ -1156,6 +1157,7 @@ send_dg(res_state statp,
}
#endif
+ fail_sendmmsg:
Perror(statp, stderr, "sendmmsg", errno);
goto err_out;
}