diff -Naur a/stream/tcp.c b/stream/tcp.c --- a/stream/tcp.c 2007-01-17 12:00:26.000000000 +0100 +++ b/stream/tcp.c 2007-01-17 20:09:46.000000000 +0100 @@ -116,9 +116,9 @@ #else hp=(struct hostent*)gethostbyname( host ); #endif - if( hp==NULL ) { - if(verb) mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_NW_CantResolv, af2String(af), host); - return TCP_ERROR_FATAL; + if( hp==NULL ) + { + return TCP_ERROR_RESOLV; } memcpy( our_s_addr, (void*)hp->h_addr_list[0], hp->h_length ); @@ -228,10 +228,34 @@ int r; int s = TCP_ERROR_FATAL; - r = connect2Server_with_af(host, port, network_prefer_ipv4 ? AF_INET:AF_INET6,verb); + int af1 = network_prefer_ipv4 ? AF_INET:AF_INET6; + int af2 = network_prefer_ipv4 ? AF_INET6:AF_INET; + + r = connect2Server_with_af(host, port, af1, verb); if (r >= 0) return r; - s = connect2Server_with_af(host, port, network_prefer_ipv4 ? AF_INET6:AF_INET,verb); + s = connect2Server_with_af(host, port, af2,verb); + + if (s == TCP_ERROR_RESOLV && r == TCP_ERROR_RESOLV) + { + if(verb) mp_msg(MSGT_NETWORK,MSGL_ERR,MSGTR_MPDEMUX_NW_CantResolv, "AF_INET and AF_INET6", host); + return TCP_ERROR_FATAL; + } + else + { + if (r == TCP_ERROR_RESOLV) + { + if(verb) mp_msg(MSGT_NETWORK,MSGL_WARN,MSGTR_MPDEMUX_NW_CantResolv, af2String(af1), host); + r = TCP_ERROR_FATAL; + } + + if (s == TCP_ERROR_RESOLV) + { + if(verb) mp_msg(MSGT_NETWORK,MSGL_WARN,MSGTR_MPDEMUX_NW_CantResolv, af2String(af2), host); + s = TCP_ERROR_FATAL; + } + } + if (s == TCP_ERROR_FATAL) return r; return s; #else diff -Naur a/stream/tcp.h b/stream/tcp.h --- a/stream/tcp.h 2007-01-17 19:40:52.000000000 +0100 +++ b/stream/tcp.h 2007-01-17 19:51:05.000000000 +0100 @@ -25,6 +25,7 @@ /* Connect to a server using a TCP connection */ int connect2Server (char *host, int port, int verb); +#define TCP_ERROR_RESOLV -4 #define TCP_ERROR_TIMEOUT -3 /* connection timeout */ #define TCP_ERROR_FATAL -2 /* unable to resolve name */ #define TCP_ERROR_PORT -1 /* unable to connect to a particular port */