summaryrefslogtreecommitdiffstats
path: root/client/red_peer.cpp
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2010-02-25 14:52:35 +0100
committerIzik Eidus <ieidus@redhat.com>2010-02-27 22:08:47 +0200
commit878c215501825cf3cd17a399b5e7dce79957f1ab (patch)
treeb1995fb970702d0646fb387c1cb6a86ec0184435 /client/red_peer.cpp
parent239b2b66b2cfd46abe8d84162a74a7e47a54d85b (diff)
downloadspice-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/red_peer.cpp')
-rw-r--r--client/red_peer.cpp12
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);