diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2010-02-25 14:52:35 +0100 |
---|---|---|
committer | Izik Eidus <ieidus@redhat.com> | 2010-02-27 22:08:47 +0200 |
commit | 878c215501825cf3cd17a399b5e7dce79957f1ab (patch) | |
tree | b1995fb970702d0646fb387c1cb6a86ec0184435 /client | |
parent | 239b2b66b2cfd46abe8d84162a74a7e47a54d85b (diff) | |
download | spice-878c215501825cf3cd17a399b5e7dce79957f1ab.tar.gz spice-878c215501825cf3cd17a399b5e7dce79957f1ab.tar.xz spice-878c215501825cf3cd17a399b5e7dce79957f1ab.zip |
spice client: fix dns lookup
ignore lookup results which are not ipv4
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'client')
-rw-r--r-- | client/red_peer.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/client/red_peer.cpp b/client/red_peer.cpp index bdbf1ff1..7534c3ee 100644 --- a/client/red_peer.cpp +++ b/client/red_peer.cpp @@ -71,17 +71,23 @@ void RedPeer::cleanup() uint32_t RedPeer::host_by_name(const char* host) { - struct addrinfo *result = NULL; + struct addrinfo *e, *result = NULL; struct sockaddr_in *addr; uint32_t return_value; int rc; rc = getaddrinfo(host, NULL, NULL, &result); - if (rc != 0 || result == NULL) { + for (e = result; e != NULL; e = e->ai_next) { + if (e->ai_family == PF_INET) + break; + } + if (rc != 0 || e == NULL) { + if (result) + freeaddrinfo(result); THROW_ERR(SPICEC_ERROR_CODE_GETHOSTBYNAME_FAILED, "cannot resolve host address %s", host); } - addr = (sockaddr_in *)result->ai_addr; + addr = (sockaddr_in *)e->ai_addr; return_value = addr->sin_addr.s_addr; freeaddrinfo(result); |