From 966977f1b72123bdd5187a60e9b50eaa70312d90 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 30 Mar 2012 08:38:58 -0400 Subject: Better error handling for sendmmsg use in res_send --- resolv/res_send.c | 12 +++++++----- 1 file 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; } -- cgit v1.2.3