aboutsummaryrefslogtreecommitdiff
path: root/socket.c
diff options
context:
space:
mode:
authorEd Swierk <eswierk@aristanetworks.com>2009-08-20 19:00:31 -0700
committerAnthony Liguori <aliguori@us.ibm.com>2009-08-27 20:46:58 -0500
commitce220b69ddd15c1981cd32346f745b609f7a525c (patch)
tree748ab96f13a066005d1af90db78568ece3716eb4 /socket.c
parent1c53d0d38dc187ba978f2748e8c4d7ab67bcc063 (diff)
downloadslirp-ce220b69ddd15c1981cd32346f745b609f7a525c.zip
slirp-ce220b69ddd15c1981cd32346f745b609f7a525c.tar.gz
slirp-ce220b69ddd15c1981cd32346f745b609f7a525c.tar.bz2
slirp: Read host DNS config on demand
Currently the qemu user-mode networking stack reads the host DNS configuration (/etc/resolv.conf or the Windows equivalent) only once when qemu starts. This causes name lookups in the guest to fail if the host is moved to a different network from which the original DNS servers are unreachable, a common occurrence when the host is a laptop. This patch changes the slirp code to read the host DNS configuration on demand, caching the results for at most 1 second to avoid unnecessary overhead if name lookups occur in rapid succession. On non-Windows hosts, /etc/resolv.conf is re-read only if the file has been replaced or if its size or mtime has changed. Signed-off-by: Ed Swierk <eswierk@aristanetworks.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'socket.c')
-rw-r--r--socket.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/socket.c b/socket.c
index 35e980e..b974267 100644
--- a/socket.c
+++ b/socket.c
@@ -557,7 +557,8 @@ int sosendto(struct socket *so, struct mbuf *m)
slirp->vnetwork_addr.s_addr) {
/* It's an alias */
if (so->so_faddr.s_addr == slirp->vnameserver_addr.s_addr) {
- addr.sin_addr = dns_addr;
+ if (get_dns_addr(&addr.sin_addr) < 0)
+ addr.sin_addr = loopback_addr;
} else {
addr.sin_addr = loopback_addr;
}