diff options
author | Steinar H. Gunderson <sesse@google.com> | 2007-09-28 14:28:14 +0000 |
---|---|---|
committer | Steinar H. Gunderson <sesse@google.com> | 2007-09-28 14:28:14 +0000 |
commit | b669e17544c0ff64d120b8a0df2677c59ccea8fd (patch) | |
tree | 7c2fb632dc14992a0528fd0649104acd9d2ddeed /ares__close_sockets.c | |
parent | a6a159dcad51c729e7601eee75c82ffc7045e4bb (diff) | |
download | c-ares-b669e17544c0ff64d120b8a0df2677c59ccea8fd.tar.gz c-ares-b669e17544c0ff64d120b8a0df2677c59ccea8fd.tar.bz2 c-ares-b669e17544c0ff64d120b8a0df2677c59ccea8fd.zip |
Three fixes in one commit (sorry): a) Take care of the tcpbuf if it ends while queued for transmission, note broken servers and close them in the main loop, and store TCP socket generation number in order not to send the same query twice over the same socket.
Diffstat (limited to 'ares__close_sockets.c')
-rw-r--r-- | ares__close_sockets.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/ares__close_sockets.c b/ares__close_sockets.c index 64eccdf..c258866 100644 --- a/ares__close_sockets.c +++ b/ares__close_sockets.c @@ -35,6 +35,8 @@ void ares__close_sockets(ares_channel channel, struct server_state *server) /* Advance server->qhead; pull out query as we go. */ sendreq = server->qhead; server->qhead = sendreq->next; + if (sendreq->data_storage != NULL) + free(sendreq->data_storage); free(sendreq); } server->qtail = NULL; @@ -45,12 +47,16 @@ void ares__close_sockets(ares_channel channel, struct server_state *server) server->tcp_buffer = NULL; server->tcp_lenbuf_pos = 0; + /* Reset brokenness */ + server->is_broken = 0; + /* Close the TCP and UDP sockets. */ if (server->tcp_socket != ARES_SOCKET_BAD) { SOCK_STATE_CALLBACK(channel, server->tcp_socket, 0, 0); closesocket(server->tcp_socket); server->tcp_socket = ARES_SOCKET_BAD; + server->tcp_connection_generation = ++channel->tcp_connection_generation; } if (server->udp_socket != ARES_SOCKET_BAD) { |