Lines Matching refs:server

74 static void          server_increment_failures(struct server_state *server)
77 const ares_channel_t *channel = server->channel;
79 node = ares__slist_node_find(channel->servers, server);
83 server->consec_failures++;
87 static void server_set_good(struct server_state *server)
90 const ares_channel_t *channel = server->channel;
92 if (!server->consec_failures) {
96 node = ares__slist_node_find(channel->servers, server);
101 server->consec_failures = 0;
222 struct server_state *server = ares__slist_node_val(node);
227 /* Make sure server has data to send and is selected in write_fds or
229 if (ares__buf_len(server->tcp_send) == 0 || server->tcp_conn == NULL) {
234 if (!FD_ISSET(server->tcp_conn->fd, write_fds)) {
238 if (server->tcp_conn->fd != write_fd) {
245 * another with the same fd to talk to another server, then we
249 FD_CLR(server->tcp_conn->fd, write_fds);
252 data = ares__buf_peek(server->tcp_send, &data_len);
253 count = ares__socket_write(channel, server->tcp_conn->fd, data, data_len);
256 handle_conn_error(server->tcp_conn, ARES_TRUE);
262 ares__buf_consume(server->tcp_send, (size_t)count);
265 if (ares__buf_len(server->tcp_send) == 0) {
266 SOCK_STATE_CALLBACK(channel, server->tcp_conn->fd, 1, 0);
279 struct server_state *server = conn->server;
285 ptr = ares__buf_append_start(server->tcp_parser, &ptr_len);
296 ares__buf_append_finish(server->tcp_parser, 0);
304 ares__buf_append_finish(server->tcp_parser, (size_t)count);
314 ares__buf_tag(server->tcp_parser);
317 if (ares__buf_fetch_be16(server->tcp_parser, &dns_len) != ARES_SUCCESS) {
318 ares__buf_tag_rollback(server->tcp_parser);
323 if (ares__buf_consume(server->tcp_parser, dns_len) != ARES_SUCCESS) {
324 ares__buf_tag_rollback(server->tcp_parser);
329 data = ares__buf_tag_fetch(server->tcp_parser, &data_len);
331 ares__buf_tag_clear(server->tcp_parser);
347 ares__buf_tag_clear(server->tcp_parser);
387 struct server_state *server = ares__slist_node_val(snode);
390 for (node = ares__llist_node_first(server->connections); node != NULL;
438 if (conn->server->addr.family == AF_INET) {
460 } else if (!same_address(&from.sa, &conn->server->addr)) {
521 * another with the same fd to talk to another server, then we
565 server_increment_failures(conn->server);
613 /* Handle an answer from a server. This must NEVER cleanup the
614 * server connection! Return something other than ARES_SUCCESS to cause
624 struct server_state *server = conn->server;
670 /* If we use EDNS and server answers with FORMERR without an OPT RR, the
719 server_increment_failures(server);
735 server_set_good(server);
749 struct server_state *server = conn->server;
752 * to the same server */
754 server_increment_failures(server);
781 /* Pick a random server from the list, we first get a random number in the
782 * range of the number of servers, then scan until we find that server in
815 static ares_status_t ares__append_tcpbuf(struct server_state *server,
820 status = ares__buf_append_be16(server->tcp_send, (unsigned short)query->qlen);
824 return ares__buf_append(server->tcp_send, query->qbuf, query->qlen);
838 /* For each trip through the entire server list, we want to double the
852 * simultaneously from multiple hosts and DNS server throttle these requests.
879 struct server_state *server;
887 /* Choose the server to send the query to */
889 server = ares__random_server(channel);
892 server = ares__slist_first_val(channel->servers);
895 if (server == NULL) {
902 /* Make sure the TCP socket for this server is set up and queue
905 if (server->tcp_conn == NULL) {
907 status = ares__open_connection(channel, server, ARES_TRUE);
913 /* These conditions are retryable as they are server-specific
917 server_increment_failures(server);
928 conn = server->tcp_conn;
930 prior_len = ares__buf_len(server->tcp_send);
932 status = ares__append_tcpbuf(server, query);
949 ares__llist_node_t *node = ares__llist_node_first(server->connections);
966 status = ares__open_connection(channel, server, ARES_FALSE);
972 /* These conditions are retryable as they are server-specific
976 server_increment_failures(server);
985 node = ares__llist_node_first(server->connections);
991 server_increment_failures(server);