diff options
author | Roland McGrath <roland@gnu.org> | 2002-07-24 22:56:44 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-07-24 22:56:44 +0000 |
commit | 7f1deee65e0a90d9e6699068b5d63a28d2546e12 (patch) | |
tree | b75aefbdd5d6d8347e0d4d3f665d8e49fcf6c43b /resolv/res_hconf.c | |
parent | 11d657d7278ae4f96f0f4c8655991f2818d0eeb9 (diff) | |
download | glibc-7f1deee65e0a90d9e6699068b5d63a28d2546e12.tar.gz glibc-7f1deee65e0a90d9e6699068b5d63a28d2546e12.tar.xz glibc-7f1deee65e0a90d9e6699068b5d63a28d2546e12.zip |
Added <ifaddrs.h> interface with functions `getifaddrs', `freeifaddrs'.
This implementation supports only IPv4. * inet/ifaddrs.h: New file. * sysdeps/generic/ifaddrs.c: New file. * sysdeps/gnu/ifaddrs.c: New file. * inet/test-ifaddrs.c: New file. * inet/Makefile (routines): Add ifaddrs. (headers): Add ifaddrs.h here. (tests): Add test-ifaddrs. * inet/Versions (GLIBC_2.3): New set, add getifaddrs and freeifaddrs. * resolv/res_hconf.c (_res_hconf_reorder_addrs): Use an explicit socket call to get an AF_INET socket, instead of using __opensock. The SIOCGIFNETMASK ioctl will work only with a PF_INET socket. * sysdeps/generic/ifreq.h (__ifreq): Take third argument SOCKFD, if not -1 use it instead of calling __opensock. * sysdeps/unix/sysv/linux/ifreq.h (__ifreq): Likewise. * sysdeps/mach/hurd/ifreq.h (__ifreq): Take new argument and ignore it. * resolv/res_hconf.c (_res_hconf_reorder_addrs): Pass new argument. * sysdeps/mach/hurd/ifreq.h: New file. * sysdeps/generic/ifreq.h (__if_freereq): Take second argument NUM_IFS. * sysdeps/unix/sysv/linux/ifreq.h (__if_freereq): Likewise. * resolv/res_hconf.c (_res_hconf_reorder_addrs): Update caller.
Diffstat (limited to 'resolv/res_hconf.c')
-rw-r--r-- | resolv/res_hconf.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/resolv/res_hconf.c b/resolv/res_hconf.c index e6faa6855e..b814f62dd3 100644 --- a/resolv/res_hconf.c +++ b/resolv/res_hconf.c @@ -538,7 +538,8 @@ _res_hconf_reorder_addrs (struct hostent *hp) num_ifs = 0; - sd = __opensock (); + /* The SIOCGIFNETMASK ioctl will only work on an AF_INET socket. */ + sd = __socket (AF_INET, SOCK_DGRAM, 0); if (sd < 0) return; @@ -546,7 +547,7 @@ _res_hconf_reorder_addrs (struct hostent *hp) __libc_lock_lock (lock); /* Get a list of interfaces. */ - __ifreq (&ifr, &num); + __ifreq (&ifr, &num, sd); if (!ifr) goto cleanup; @@ -577,7 +578,7 @@ _res_hconf_reorder_addrs (struct hostent *hp) ifaddrs = realloc (ifaddrs, num_ifs * sizeof (ifaddrs[0])); cleanup1: - __if_freereq (ifr); + __if_freereq (ifr, num); cleanup: /* Release lock, preserve error value, and close socket. */ |