wrong, revert the previous "fix" and instead check that the fd_set pointer

is non-NULL before we FD_CLR
pull/1/head
Daniel Stenberg 18 years ago
parent 99f15b20e8
commit c97d91e349
  1. 47
      ares_process.c

@ -109,7 +109,7 @@ void ares_process_fd(ares_channel channel,
* otherwise. This is mostly for HP-UX, which could return EAGAIN or * otherwise. This is mostly for HP-UX, which could return EAGAIN or
* EWOULDBLOCK. See this man page * EWOULDBLOCK. See this man page
* *
* http://devrsrc1.external.hp.com/STKS/cgi-bin/man2html?manpage=/usr/share/man/man2.Z/send.2 * http://devrsrc1.external.hp.com/STKS/cgi-bin/man2html?manpage=/usr/share/man/man2.Z/send.2
*/ */
static int try_again(int errnum) static int try_again(int errnum)
{ {
@ -146,7 +146,7 @@ static void write_tcp_data(ares_channel channel,
ssize_t wcount; ssize_t wcount;
size_t n; size_t n;
if(!write_fds || (write_fd == ARES_SOCKET_BAD)) if(!write_fds && (write_fd == ARES_SOCKET_BAD))
/* no possible action */ /* no possible action */
return; return;
@ -167,12 +167,13 @@ static void write_tcp_data(ares_channel channel,
continue; continue;
} }
/* If there's an error and we close this socket, then open if(write_fds)
* another with the same fd to talk to another server, then we /* If there's an error and we close this socket, then open
* don't want to think that it was the new socket that was * another with the same fd to talk to another server, then we
* ready. This is not disastrous, but is likely to result in * don't want to think that it was the new socket that was
* extra system calls and confusion. */ * ready. This is not disastrous, but is likely to result in
FD_CLR(server->tcp_socket, write_fds); * extra system calls and confusion. */
FD_CLR(server->tcp_socket, write_fds);
/* Count the number of send queue items. */ /* Count the number of send queue items. */
n = 0; n = 0;
@ -267,7 +268,7 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds,
int i; int i;
ssize_t count; ssize_t count;
if(!read_fds || (read_fd == ARES_SOCKET_BAD)) if(!read_fds && (read_fd == ARES_SOCKET_BAD))
/* no possible action */ /* no possible action */
return; return;
@ -287,12 +288,13 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds,
continue; continue;
} }
/* If there's an error and we close this socket, then open if(read_fds)
* another with the same fd to talk to another server, then we /* If there's an error and we close this socket, then open
* don't want to think that it was the new socket that was * another with the same fd to talk to another server, then we
* ready. This is not disastrous, but is likely to result in * don't want to think that it was the new socket that was
* extra system calls and confusion. */ * ready. This is not disastrous, but is likely to result in
FD_CLR(server->tcp_socket, read_fds); * extra system calls and confusion. */
FD_CLR(server->tcp_socket, read_fds);
if (server->tcp_lenbuf_pos != 2) if (server->tcp_lenbuf_pos != 2)
{ {
@ -363,7 +365,7 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds,
ssize_t count; ssize_t count;
unsigned char buf[PACKETSZ + 1]; unsigned char buf[PACKETSZ + 1];
if(!read_fds || (read_fd == ARES_SOCKET_BAD)) if(!read_fds && (read_fd == ARES_SOCKET_BAD))
/* no possible action */ /* no possible action */
return; return;
@ -384,12 +386,13 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds,
continue; continue;
} }
/* If there's an error and we close this socket, then open if(read_fds)
* another with the same fd to talk to another server, then we /* If there's an error and we close this socket, then open
* don't want to think that it was the new socket that was * another with the same fd to talk to another server, then we
* ready. This is not disastrous, but is likely to result in * don't want to think that it was the new socket that was
* extra system calls and confusion. */ * ready. This is not disastrous, but is likely to result in
FD_CLR(server->udp_socket, read_fds); * extra system calls and confusion. */
FD_CLR(server->udp_socket, read_fds);
count = sread(server->udp_socket, buf, sizeof(buf)); count = sread(server->udp_socket, buf, sizeof(buf));
if (count == -1 && try_again(SOCKERRNO)) if (count == -1 && try_again(SOCKERRNO))

Loading…
Cancel
Save