Skip to content
Snippets Groups Projects
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
No related branches found
No related tags found
No related merge requests found
......@@ -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);
count = sread(server->udp_socket, buf, sizeof(buf));
if (count == -1 && try_again(SOCKERRNO))
continue;
else if (count <= 0)
handle_error(channel, i, now);
process_answer(channel, buf, (int)count, i, 0, now);
/* 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);
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment