*
* \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) + 2];
+ static char output[sizeof(hbuf) + sizeof(sbuf) + 4];
int ret;
ret = getnameinfo(sa, salen(sa),
hbuf, sizeof(hbuf),
sbuf, sizeof(sbuf),
- NI_NUMERICHOST);
- if (ret == 0) {
- snprintf(output, sizeof(output), "%s#%s", hbuf, sbuf);
- } else {
+ 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;
}