1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00

Cache network interface information

Whenever getaddrinfo needed network interface information it used the
netlink interface to read the information every single time.  The
problem is that this information can change at any time.

The patch implements monitoring of the network interfaces through
nscd.  If no change is detected the previously read information can
be reused (which is the norm).  This timestamp information is also
made available to other processes using the shared memory segment
between nscd and those processes.
This commit is contained in:
Ulrich Drepper
2011-10-31 01:51:16 -04:00
parent 636064eb4c
commit 3a2c02424d
10 changed files with 359 additions and 46 deletions

View File

@ -2386,7 +2386,7 @@ getaddrinfo (const char *name, const char *service,
|| (hints->ai_family == PF_INET6 && ! seen_ipv6))
{
/* We cannot possibly return a valid answer. */
free (in6ai);
__free_in6ai (in6ai);
return EAI_NONAME;
}
}
@ -2400,7 +2400,7 @@ getaddrinfo (const char *name, const char *service,
{
if (hints->ai_flags & AI_NUMERICSERV)
{
free (in6ai);
__free_in6ai (in6ai);
return EAI_NONAME;
}
@ -2422,7 +2422,7 @@ getaddrinfo (const char *name, const char *service,
if (last_i != 0)
{
freeaddrinfo (p);
free (in6ai);
__free_in6ai (in6ai);
return -(last_i & GAIH_EAI);
}
@ -2434,7 +2434,7 @@ getaddrinfo (const char *name, const char *service,
}
else
{
free (in6ai);
__free_in6ai (in6ai);
return EAI_FAMILY;
}
@ -2622,7 +2622,7 @@ getaddrinfo (const char *name, const char *service,
p->ai_canonname = canonname;
}
free (in6ai);
__free_in6ai (in6ai);
if (p)
{