return generic_mtu(af_type) - estimated_header_overhead(af_type);
}
-/**
- * Print numeric host and port number (beware - uses static char).
- *
- * \param sa The IPv4/IPv6 socket address to use.
- *
- * \return Host string in numeric host:port format, \sa parse_url().
- * \sa getnameinfo(3), services(5), nsswitch.conf(5)
- */
-static char *host_and_port(const struct sockaddr_storage *ss)
-{
- const struct sockaddr *sa = normalize_ip_address(ss);
- char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
- static char output[sizeof(hbuf) + sizeof(sbuf) + 4];
- int ret;
-
- ret = getnameinfo(sa, salen(sa),
- hbuf, sizeof(hbuf),
- sbuf, sizeof(sbuf),
- NI_NUMERICHOST | NI_NUMERICSERV);
- if (ret) {
- snprintf(output, sizeof(output), "(unknown)");
- PARA_WARNING_LOG("hostname lookup error (%s).\n",
- gai_strerror(ret));
- } else if (sa->sa_family == AF_INET6) {
- snprintf(output, sizeof(output), "[%s]:%s", hbuf, sbuf);
- } else {
- snprintf(output, sizeof(output), "%s:%s", hbuf, sbuf);
- }
- return output;
-}
-
/**
* Look up the local or remote side of a connected socket structure.
*
* remote side.
*
* \return A static character string identifying hostname and port of the
- * chosen side.
+ * chosen side in numeric host:port format.
*
- * \sa getsockname(2), getpeername(2).
+ * \sa getsockname(2), getpeername(2), parse_url(), getnameinfo(3),
+ * services(5), nsswitch.conf(5).
*/
static char *__get_sock_name(int fd, int (*getname)(int, struct sockaddr*,
socklen_t *))
{
struct sockaddr_storage ss;
+ const struct sockaddr *sa;
socklen_t sslen = sizeof(ss);
+ char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
+ static char output[sizeof(hbuf) + sizeof(sbuf) + 4];
+ int ret;
if (getname(fd, (struct sockaddr *)&ss, &sslen) < 0) {
- static char *dont_know = "(don't know)";
PARA_ERROR_LOG("can not determine address from fd %d: %s\n",
fd, strerror(errno));
- return dont_know;
+ snprintf(output, sizeof(output), "(unknown)");
+ return output;
}
- return host_and_port(&ss);
+ sa = normalize_ip_address(&ss);
+ ret = getnameinfo(sa, salen(sa), hbuf, sizeof(hbuf), sbuf,
+ sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV);
+ if (ret) {
+ PARA_WARNING_LOG("hostname lookup error (%s).\n",
+ gai_strerror(ret));
+ snprintf(output, sizeof(output), "(lookup error)");
+ } else if (sa->sa_family == AF_INET6)
+ snprintf(output, sizeof(output), "[%s]:%s", hbuf, sbuf);
+ else
+ snprintf(output, sizeof(output), "%s:%s", hbuf, sbuf);
+ return output;
}
/**