--- qemu-0.9.1/slirp/misc.c 2008-10-29 17:33:03.000000000 -0700 +++ qemu-0.9.1/slirp/misc.c 2008-11-03 17:15:51.000000000 -0800 @@ -7,6 +7,9 @@ #define WANT_SYS_IOCTL_H #include +#ifdef HAVE_GETIFADDRS +#include +#endif u_int curtime, time_fasttimo, last_slowtimo; @@ -86,6 +89,26 @@ void getouraddr() { +#ifdef HAVE_GETIFADDRS + struct ifaddrs *ifp; + + if (getifaddrs(&ifp) == 0) { + struct ifaddrs *ifa; + for (ifa = ifp; ifa; ifa = ifa->ifa_next) { + struct sockaddr *sa; + + sa = ifa->ifa_addr; + if (sa->sa_family == AF_INET) { + struct sockaddr_in *sin = (struct sockaddr_in *) sa; + if (sin->sin_addr.s_addr != htonl(INADDR_LOOPBACK)) { + our_addr = sin->sin_addr; + break; + } + } + } + freeifaddrs(ifp); + } +#else char buff[256]; struct hostent *he = NULL; @@ -93,6 +116,7 @@ he = gethostbyname(buff); if (he) our_addr = *(struct in_addr *)he->h_addr; +#endif if (our_addr.s_addr == 0) our_addr.s_addr = loopback_addr.s_addr; }