mirror of
https://github.com/irssi/irssi.git
synced 2024-12-04 14:46:39 -05:00
"Temporary error in nameserver" shouldn't remove server reconnections.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@412 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
c15f655bca
commit
2f97b822fb
@ -340,7 +340,7 @@ int net_gethostbyname(const char *addr, IPADDR *ip)
|
|||||||
freeaddrinfo(ai);
|
freeaddrinfo(ai);
|
||||||
#else
|
#else
|
||||||
hp = gethostbyname(addr);
|
hp = gethostbyname(addr);
|
||||||
if (hp == NULL) return -1;
|
if (hp == NULL) return h_errno;
|
||||||
|
|
||||||
ip->family = AF_INET;
|
ip->family = AF_INET;
|
||||||
memcpy(&ip->addr, hp->h_addr, 4);
|
memcpy(&ip->addr, hp->h_addr, 4);
|
||||||
@ -467,7 +467,7 @@ const char *net_gethosterror(int error)
|
|||||||
|
|
||||||
return gai_strerror(error);
|
return gai_strerror(error);
|
||||||
#else
|
#else
|
||||||
switch (h_errno) {
|
switch (error) {
|
||||||
case HOST_NOT_FOUND:
|
case HOST_NOT_FOUND:
|
||||||
return _("Host not found");
|
return _("Host not found");
|
||||||
case NO_ADDRESS:
|
case NO_ADDRESS:
|
||||||
@ -483,6 +483,17 @@ const char *net_gethosterror(int error)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* return TRUE if host lookup failed because it didn't exist (ie. not
|
||||||
|
some error with name server) */
|
||||||
|
int net_hosterror_notfound(int error)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
|
return error != 1 && (error == EAI_NONAME || error == EAI_NODATA);
|
||||||
|
#else
|
||||||
|
return error == HOST_NOT_FOUND || error == NO_ADDRESS;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
int is_ipv4_address(const char *host)
|
int is_ipv4_address(const char *host)
|
||||||
{
|
{
|
||||||
while (*host != '\0') {
|
while (*host != '\0') {
|
||||||
|
@ -58,6 +58,9 @@ int net_gethostbyname(const char *addr, IPADDR *ip);
|
|||||||
int net_gethostbyaddr(IPADDR *ip, char **name);
|
int net_gethostbyaddr(IPADDR *ip, char **name);
|
||||||
/* get error of net_gethostname() */
|
/* get error of net_gethostname() */
|
||||||
const char *net_gethosterror(int error);
|
const char *net_gethosterror(int error);
|
||||||
|
/* return TRUE if host lookup failed because it didn't exist (ie. not
|
||||||
|
some error with name server) */
|
||||||
|
int net_hosterror_notfound(int error);
|
||||||
|
|
||||||
/* Get socket address/port */
|
/* Get socket address/port */
|
||||||
int net_getsockname(int handle, IPADDR *addr, int *port);
|
int net_getsockname(int handle, IPADDR *addr, int *port);
|
||||||
|
@ -141,20 +141,22 @@ static void server_connect_callback_readpipe(SERVER_REC *server, int handle)
|
|||||||
server->connect_pipe[1] = -1;
|
server->connect_pipe[1] = -1;
|
||||||
|
|
||||||
conn = server->connrec;
|
conn = server->connrec;
|
||||||
server->handle = iprec.error == -1 ? -1 :
|
server->handle = iprec.error != 0 ? -1 :
|
||||||
net_connect_ip(&iprec.ip, conn->proxy != NULL ?
|
net_connect_ip(&iprec.ip, conn->proxy != NULL ?
|
||||||
conn->proxy_port : conn->port,
|
conn->proxy_port : conn->port,
|
||||||
conn->own_ip != NULL ? conn->own_ip : NULL);
|
conn->own_ip != NULL ? conn->own_ip : NULL);
|
||||||
if (server->handle == -1) {
|
if (server->handle == -1) {
|
||||||
/* failed */
|
/* failed */
|
||||||
if (iprec.error != -1) {
|
if (iprec.error == 0 || !net_hosterror_notfound(iprec.error)) {
|
||||||
/* reconnect only if connect() was the one that
|
/* reconnect back only if either
|
||||||
failed, if host lookup failed we most probably
|
1) connect() failed
|
||||||
don't want to try reconnecting back. */
|
2) host name lookup failed not because the host
|
||||||
|
wasn't found, but because there was some
|
||||||
|
other error in nameserver */
|
||||||
server->connection_lost = TRUE;
|
server->connection_lost = TRUE;
|
||||||
}
|
}
|
||||||
server_cant_connect(server,
|
server_cant_connect(server,
|
||||||
iprec.error != -1 ? g_strerror(errno) : /* connect() failed */
|
iprec.error == 0 ? g_strerror(errno) : /* connect() failed */
|
||||||
(iprec.errorstr != NULL ? iprec.errorstr : "Host lookup failed")); /* gethostbyname() failed */
|
(iprec.errorstr != NULL ? iprec.errorstr : "Host lookup failed")); /* gethostbyname() failed */
|
||||||
g_free_not_null(iprec.errorstr);
|
g_free_not_null(iprec.errorstr);
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user