getaddrinfo(): get only IPv4 TCP addresses v_0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Thu, 04 Aug 2022 22:49:17 +0200
branchv_0
changeset 11 a910051cd975
parent 10 6a6b93507856
child 12 fcc5ed0fab9f
getaddrinfo(): get only IPv4 TCP addresses
src/Socket.cpp
--- a/src/Socket.cpp	Thu Aug 04 02:13:22 2022 +0200
+++ b/src/Socket.cpp	Thu Aug 04 22:49:17 2022 +0200
@@ -81,13 +81,20 @@
 
 static in_addr_t getAddress(const std::string& host) {
 
+	struct addrinfo query;
+	memset(&query, sizeof (query), 0);
+	query.ai_family = AF_INET;
+	query.ai_socktype = SOCK_STREAM;
+	query.ai_protocol = IPPROTO_TCP;
+	query.ai_flags = AI_ALL;
+
 	struct addrinfo* addrInfo;
-	check(getaddrinfo(host.c_str(), "", nullptr, &addrInfo), "getaddrinfo");
+	check(getaddrinfo(host.c_str(), "", &query, &addrInfo), "getaddrinfo");
 
 	std::cerr << "found: " << addrInfo << std::endl;
 	if (addrInfo) {
 		for (addrinfo* ai = addrInfo; ai; ai = ai->ai_next) {
-			std::cerr << "address info: family=" << std::to_string(ai->ai_addr->sa_family);
+			std::cerr << "address info: family=" << std::to_string(ai->ai_addr->sa_family) << " socktype=" << std::to_string(ai->ai_socktype) << " protocol=" << std::to_string(ai->ai_protocol);
 			if (sockaddr_in * sa = castAddress<sockaddr_in>(ai, AF_INET)) std::cerr << " IPv4=" << ip2string(ai);
 			else if (sockaddr_in6 * sa = castAddress<sockaddr_in6>(ai, AF_INET6)) std::cerr << " IPv6=" << ip2string(ai);
 			std::cerr << std::endl;