// taken from http://forums.mozillazine.org/viewtopic.php?f=38&t=84574&p=638331 // compile with gcc addrconfig.c -o addrconfig.so -shared -ldl -nostartfiles -fpic // put /path/to/addrconfig.so in /etc/ld.so.preload #include #include #include #include #include #include #define __USE_GNU #include #include int (*real_getaddrinfo)(const char *, const char *, const struct addrinfo *, struct addrinfo **); void _init (void) { const char *err; real_getaddrinfo = dlsym (RTLD_NEXT, "getaddrinfo"); if ((err = dlerror ()) != NULL) fprintf (stderr, "dlsym (getaddrinfo): %s\n", err); } int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res) { struct addrinfo newhints; memcpy (&newhints, hints, sizeof (struct addrinfo)); newhints.ai_flags |= AI_ADDRCONFIG; int retval = real_getaddrinfo(node, service, &newhints, res); return retval; }