Loading ares/CHANGES +5 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,11 @@ * September 22 2007 (Daniel Stenberg) - Steinar H. Gunderson fixed: Correctly clear sockets from the fd_set on in several functions (write_tcp_data, read_tcp_data, read_udp_packets) so that if it fails and the socket is closed the following code doesn't try to use the file descriptor. - Steinar H. Gunderson modified c-ares to now also do to DNS retries even when TCP is used since there are several edge cases where it still makes sense. Loading ares/ares_process.c +21 −0 Original line number Diff line number Diff line Loading @@ -167,6 +167,13 @@ static void write_tcp_data(ares_channel channel, continue; } /* If there's an error and we close this socket, then open * another with the same fd to talk to another server, then we * don't want to think that it was the new socket that was * ready. This is not disastrous, but is likely to result in * extra system calls and confusion. */ FD_CLR(server->tcp_socket, write_fds); /* Count the number of send queue items. */ n = 0; for (sendreq = server->qhead; sendreq; sendreq = sendreq->next) Loading Loading @@ -280,6 +287,13 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, continue; } /* If there's an error and we close this socket, then open * another with the same fd to talk to another server, then we * don't want to think that it was the new socket that was * ready. This is not disastrous, but is likely to result in * extra system calls and confusion. */ FD_CLR(server->tcp_socket, read_fds); if (server->tcp_lenbuf_pos != 2) { /* We haven't yet read a length word, so read that (or Loading Loading @@ -370,6 +384,13 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds, continue; } /* If there's an error and we close this socket, then open * another with the same fd to talk to another server, then we * don't want to think that it was the new socket that was * ready. This is not disastrous, but is likely to result in * 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; Loading Loading
ares/CHANGES +5 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,11 @@ * September 22 2007 (Daniel Stenberg) - Steinar H. Gunderson fixed: Correctly clear sockets from the fd_set on in several functions (write_tcp_data, read_tcp_data, read_udp_packets) so that if it fails and the socket is closed the following code doesn't try to use the file descriptor. - Steinar H. Gunderson modified c-ares to now also do to DNS retries even when TCP is used since there are several edge cases where it still makes sense. Loading
ares/ares_process.c +21 −0 Original line number Diff line number Diff line Loading @@ -167,6 +167,13 @@ static void write_tcp_data(ares_channel channel, continue; } /* If there's an error and we close this socket, then open * another with the same fd to talk to another server, then we * don't want to think that it was the new socket that was * ready. This is not disastrous, but is likely to result in * extra system calls and confusion. */ FD_CLR(server->tcp_socket, write_fds); /* Count the number of send queue items. */ n = 0; for (sendreq = server->qhead; sendreq; sendreq = sendreq->next) Loading Loading @@ -280,6 +287,13 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, continue; } /* If there's an error and we close this socket, then open * another with the same fd to talk to another server, then we * don't want to think that it was the new socket that was * ready. This is not disastrous, but is likely to result in * extra system calls and confusion. */ FD_CLR(server->tcp_socket, read_fds); if (server->tcp_lenbuf_pos != 2) { /* We haven't yet read a length word, so read that (or Loading Loading @@ -370,6 +384,13 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds, continue; } /* If there's an error and we close this socket, then open * another with the same fd to talk to another server, then we * don't want to think that it was the new socket that was * ready. This is not disastrous, but is likely to result in * 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; Loading