Commit c788efff authored by Steinar H. Gunderson's avatar Steinar H. Gunderson
Browse files

Read and process as many packets as possible in read_udp_packets, to avoid...

Read and process as many packets as possible in read_udp_packets, to avoid having to run the entire event loop once per packet. (Patch from the Google tree.)
parent c1a475e7
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -399,13 +399,17 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds,
         * extra system calls and confusion. */
        FD_CLR(server->udp_socket, read_fds);

      /* To reduce event loop overhead, read and process as many
       * packets as we can. */
      do {
        count = sread(server->udp_socket, buf, sizeof(buf));
        if (count == -1 && try_again(SOCKERRNO))
          continue;
        else if (count <= 0)
          handle_error(channel, i, now);

        else
          process_answer(channel, buf, (int)count, i, 0, now);
       } while (count > 0);
    }
}