summaryrefslogtreecommitdiff
path: root/src/AsyncNameResolver.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-10-04 14:33:49 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-10-04 14:33:49 +0000
commit5db7b123b5233d26617c20d6de40921366733040 (patch)
treee47f4ee88ee995082f4366f10e9e7e5ef50d2195 /src/AsyncNameResolver.cc
parent329de2a9b56ec1e4d533759b9da4725b1b1ffb76 (diff)
2010-10-04 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Use inet_ntoa if inet_ntop is not available. Since inet_ntoa does not handle IPv6 address, IPv6 support is limited in this case. Fixed unit test error under mingw32. * configure.ac * src/AsyncNameResolver.cc * src/SocketCore.cc * src/bittorrent_helper.cc * test/BittorrentHelperTest.cc * test/DHTMessageFactoryImplTest.cc * test/DHTRoutingTableDeserializerTest.cc * test/DHTRoutingTableSerializerTest.cc * test/DefaultBtAnnounceTest.cc * test/Metalink2RequestGroupTest.cc * test/UTPexExtensionMessageTest.cc
Diffstat (limited to 'src/AsyncNameResolver.cc')
-rw-r--r--src/AsyncNameResolver.cc11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/AsyncNameResolver.cc b/src/AsyncNameResolver.cc
index bf6a34d1..7c7d6320 100644
--- a/src/AsyncNameResolver.cc
+++ b/src/AsyncNameResolver.cc
@@ -53,15 +53,24 @@ void callback(void* arg, int status, int timeouts, struct hostent* host)
return;
}
for(char** ap = host->h_addr_list; *ap; ++ap) {
+#ifdef HAVE_INET_NTOP
char addrstring[INET6_ADDRSTRLEN];
const char* dst =
inet_ntop(host->h_addrtype, *ap, addrstring, sizeof(addrstring));
if(dst) {
resolverPtr->resolvedAddresses_.push_back(dst);
}
+#else // !HAVE_INET_NTOP
+ if(host->h_addrtype != AF_INET) {
+ continue;
+ }
+ struct in_addr addr;
+ memcpy(&addr, *ap, sizeof(in_addr));
+ resolverPtr->resolvedAddresses_.push_back(inet_ntoa(addr));
+#endif // !HAVE_INET_NTOP
}
if(resolverPtr->resolvedAddresses_.empty()) {
- resolverPtr->error_ = "inet_ntop failed";
+ resolverPtr->error_ = "address conversion failed";
resolverPtr->status_ = AsyncNameResolver::STATUS_ERROR;
} else {
resolverPtr->status_ = AsyncNameResolver::STATUS_SUCCESS;