From: pbrook Date: Sun, 23 Apr 2006 19:41:17 +0000 (+0000) Subject: Fix slirp redirection on systems without a useful host IP address. X-Git-Tag: 0.10.0-0maemo1~4502 X-Git-Url: http://git.maemo.org/git/?a=commitdiff_plain;h=f4e15b4b4b0b8dcecf056ea817aae967de401b45;p=qemu Fix slirp redirection on systems without a useful host IP address. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1837 c046a42c-6fe2-441c-8c8c-71466251a162 --- diff --git a/slirp/misc.c b/slirp/misc.c index a58b631..1cd8749 100644 --- a/slirp/misc.c +++ b/slirp/misc.c @@ -88,15 +88,16 @@ void getouraddr() { char buff[256]; - struct hostent *he; - - if (gethostname(buff,256) < 0) - return; - - if ((he = gethostbyname(buff)) == NULL) - return; - - our_addr = *(struct in_addr *)he->h_addr; + struct hostent *he = NULL; + + if (gethostname(buff,256) == 0) + he = gethostbyname(buff); + if (he) + our_addr = *(struct in_addr *)he->h_addr; + /* If the host doesn't have a useful IP address then use the + guest side address. */ + if (our_addr.s_addr == 0 || our_addr.s_addr == loopback_addr.s_addr) + our_addr.s_addr = special_addr.s_addr | htonl(CTL_ALIAS); } #if SIZEOF_CHAR_P == 8 diff --git a/slirp/slirp.c b/slirp/slirp.c index a7d3f69..b4ab12a 100644 --- a/slirp/slirp.c +++ b/slirp/slirp.c @@ -146,7 +146,6 @@ void slirp_init(void) m_init(); /* set default addresses */ - getouraddr(); inet_aton("127.0.0.1", &loopback_addr); if (get_dns_addr(&dns_addr) < 0) { @@ -155,6 +154,7 @@ void slirp_init(void) } inet_aton(CTL_SPECIAL, &special_addr); + getouraddr(); } #define CONN_CANFSEND(so) (((so)->so_state & (SS_FCANTSENDMORE|SS_ISFCONNECTED)) == SS_ISFCONNECTED)