+static void print_sockname(int fd) {
+ static char buf[INET6_ADDRSTRLEN+1];
+ struct sockaddr_storage local;
+ int ret;
+
+ socklen_t local_len = sizeof(struct sockaddr_storage);
+ if (getsockname(fd, (struct sockaddr*)&local, &local_len) == -1) {
+ perror("getsockname()");
+ (void)close(fd);
+ printf("no IPv6");
+ return;
+ }
+
+ memset(buf, 0, INET6_ADDRSTRLEN + 1);
+ if ((ret = getnameinfo((struct sockaddr*)&local, local_len,
+ buf, sizeof(buf), NULL, 0,
+ NI_NUMERICHOST)) != 0) {
+ fprintf(stderr, "getnameinfo(): %s\n", gai_strerror(ret));
+ printf("no IPv6");
+ return;
+ }
+
+ printf("%s", buf);
+}
+