]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
msg/msg_types: use inet_ntop(3) to render IP addresses
authorSage Weil <sage@redhat.com>
Fri, 15 Mar 2019 15:19:16 +0000 (10:19 -0500)
committerSage Weil <sage@redhat.com>
Fri, 15 Mar 2019 15:20:11 +0000 (10:20 -0500)
This is a lower-level helper than getnameinfo(3) and should be a bit
faster.

Signed-off-by: Sage Weil <sage@redhat.com>
src/msg/msg_types.cc

index 62ca036e225907a4baf3894b883767be96a361b3..7d29713538b6e3fdee0420bbb51612b6084a851a 100644 (file)
@@ -187,46 +187,36 @@ ostream& operator<<(ostream& out, const entity_addr_t &addr)
   return out;
 }
 
-ostream& operator<<(ostream& out, const sockaddr_storage &ss)
+ostream& operator<<(ostream& out, const sockaddr *psa)
 {
   char buf[NI_MAXHOST] = { 0 };
-  char serv[NI_MAXSERV] = { 0 };
-  size_t hostlen;
-
-  if (ss.ss_family == AF_INET)
-    hostlen = sizeof(struct sockaddr_in);
-  else if (ss.ss_family == AF_INET6)
-    hostlen = sizeof(struct sockaddr_in6);
-  else
-    hostlen = sizeof(struct sockaddr_storage);
-  getnameinfo((struct sockaddr *)&ss, hostlen, buf, sizeof(buf),
-             serv, sizeof(serv),
-             NI_NUMERICHOST | NI_NUMERICSERV);
-  if (ss.ss_family == AF_INET6)
-    return out << '[' << buf << "]:" << serv;
-  return out << buf << ':' << serv;
+
+  switch (psa->sa_family) {
+  case AF_INET:
+    {
+      const sockaddr_in *sa = (const sockaddr_in*)psa;
+      inet_ntop(AF_INET, &sa->sin_addr, buf, NI_MAXHOST);
+      return out << buf << ':'
+                << ntohs(sa->sin_port);
+    }
+  case AF_INET6:
+    {
+      const sockaddr_in6 *sa = (const sockaddr_in6*)psa;
+      inet_ntop(AF_INET6, &sa->sin6_addr, buf, NI_MAXHOST);
+      return out << '[' << buf << "]:"
+                << ntohs(sa->sin6_port);
+    }
+  default:
+    return out << "(unrecognized address family " << psa->sa_family << ")";
+  }
 }
 
-ostream& operator<<(ostream& out, const sockaddr *sa)
+ostream& operator<<(ostream& out, const sockaddr_storage &ss)
 {
-  char buf[NI_MAXHOST] = { 0 };
-  char serv[NI_MAXSERV] = { 0 };
-  size_t hostlen;
-
-  if (sa->sa_family == AF_INET)
-    hostlen = sizeof(struct sockaddr_in);
-  else if (sa->sa_family == AF_INET6)
-    hostlen = sizeof(struct sockaddr_in6);
-  else
-    hostlen = sizeof(struct sockaddr_storage);
-  getnameinfo(sa, hostlen, buf, sizeof(buf),
-             serv, sizeof(serv),
-             NI_NUMERICHOST | NI_NUMERICSERV);
-  if (sa->sa_family == AF_INET6)
-    return out << '[' << buf << "]:" << serv;
-  return out << buf << ':' << serv;
+  return out << (const sockaddr*)&ss;
 }
 
+
 // entity_addrvec_t
 
 bool entity_addrvec_t::parse(const char *s, const char **end)