From bc889ca27a273b62bc0b25ecd83338d2e4c471cf Mon Sep 17 00:00:00 2001 From: David Anderson Date: Tue, 31 Mar 2009 16:45:17 +0000 Subject: [PATCH] - client: (unix): if host name lookup fails, call res_init(). This is an attempt to fix a problem on Linux where, if the client starts before a VPN is set up, it can never communicate svn path=/trunk/boinc/; revision=17711 --- checkin_notes | 10 ++++++++++ client/http_curl.cpp | 1 + lib/network.cpp | 8 +++++++- lib/network.h | 1 + 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/checkin_notes b/checkin_notes index d296b22dd7..8e66c76f67 100644 --- a/checkin_notes +++ b/checkin_notes @@ -3486,3 +3486,13 @@ David 30 Mar 2009 lib/ gui_rpc_client_ops.cpp + +David 31 Mar 2009 + - client: (unix): if host name lookup fails, call res_init(). + This is an attempt to fix a problem on Linux where, + if the client starts before a VPN is set up, it can never communicate + + client/ + http_curl.cpp + lib/ + network.cpp,h diff --git a/client/http_curl.cpp b/client/http_curl.cpp index 2de133b451..83b949b7a4 100644 --- a/client/http_curl.cpp +++ b/client/http_curl.cpp @@ -1038,6 +1038,7 @@ void HTTP_OP::handle_messages(CURLMsg *pcurlMsg) { strcpy(error_msg, curl_easy_strerror(CurlResult)); switch(CurlResult) { case CURLE_COULDNT_RESOLVE_HOST: + reset_dns(); http_op_retval = ERR_GETHOSTBYNAME; break; case CURLE_COULDNT_CONNECT: diff --git a/lib/network.cpp b/lib/network.cpp index ffdadc18e3..bcaedf371b 100644 --- a/lib/network.cpp +++ b/lib/network.cpp @@ -38,6 +38,7 @@ #ifdef HAVE_ARPA_INET_H #include #endif +#include #include #include #include @@ -199,6 +200,11 @@ int WinsockCleanup() { return WSACleanup(); } - #endif + +void reset_dns() { +#ifndef _WIN32 + res_init(); +#endif +} const char *BOINC_RCSID_557bf0741f="$Id$"; diff --git a/lib/network.h b/lib/network.h index 69e03d3d0b..26094e04a2 100644 --- a/lib/network.h +++ b/lib/network.h @@ -46,6 +46,7 @@ extern int boinc_socket_asynch(int sock, bool asynch); extern void boinc_close_socket(int sock); extern int get_socket_error(int fd); extern const char* socket_error_str(); +extern void reset_dns(); #if defined(_WIN32) && defined(USE_WINSOCK) typedef int boinc_socklen_t;