From b8a36ccb8c2e862496dd5715bd09430dca3d0dc8 Mon Sep 17 00:00:00 2001 From: Nick Peng Date: Mon, 24 Aug 2020 23:18:35 +0800 Subject: [PATCH] dns_client: avoid connect failure --- src/dns_client.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/dns_client.c b/src/dns_client.c index abe9dd6..a45cfd4 100644 --- a/src/dns_client.c +++ b/src/dns_client.c @@ -1559,6 +1559,9 @@ static int _DNS_client_create_socket_tcp(struct dns_server_info *server_info) } } + server_info->fd = fd; + server_info->status = DNS_SERVER_STATUS_CONNECTING; + memset(&event, 0, sizeof(event)); event.events = EPOLLIN | EPOLLOUT; event.data.ptr = server_info; @@ -1567,17 +1570,19 @@ static int _DNS_client_create_socket_tcp(struct dns_server_info *server_info) return -1; } - server_info->fd = fd; - server_info->status = DNS_SERVER_STATUS_CONNECTING; - tlog(TLOG_DEBUG, "tcp server %s connecting.\n", server_info->ip); return 0; errout: + if (server_info->fd > 0) { + server_info->fd = -1; + } + + server_info->status = DNS_SERVER_STATUS_INIT; + if (fd > 0) { close(fd); } - return -1; } @@ -1652,6 +1657,11 @@ static int _DNS_client_create_socket_tls(struct dns_server_info *server_info, ch SSL_set_tlsext_host_name(ssl, hostname); } + server_info->fd = fd; + server_info->ssl = ssl; + server_info->ssl_write_len = -1; + server_info->status = DNS_SERVER_STATUS_CONNECTING; + memset(&event, 0, sizeof(event)); event.events = EPOLLIN | EPOLLOUT; event.data.ptr = server_info; @@ -1660,15 +1670,20 @@ static int _DNS_client_create_socket_tls(struct dns_server_info *server_info, ch goto errout; } - server_info->fd = fd; - server_info->ssl = ssl; - server_info->ssl_write_len = -1; - server_info->status = DNS_SERVER_STATUS_CONNECTING; - tlog(TLOG_DEBUG, "tls server %s connecting.\n", server_info->ip); return 0; errout: + if (server_info->fd > 0) { + server_info->fd = -1; + } + + if (server_info->ssl) { + server_info->ssl = NULL; + } + + server_info->status = DNS_SERVER_STATUS_INIT; + if (fd > 0) { close(fd); }