Here's the corresponding server C code for a dual-stack platform:
int ServSock, csock;
- struct sockaddr addr, from;
+ /* struct sockaddr is too small! */
+ struct sockaddr_storage addr, from;
...
ServSock = socket(AF_INET6, SOCK_STREAM, PF_INET6);
bind(ServSock, &addr, sizeof(addr));
SKIP_NC_EXTRA (const int execparam = 0;)
USE_NC_EXTRA (char **execparam = NULL;)
struct sockaddr_in address;
- struct hostent *hostinfo;
fd_set readfds, testfds;
int opt; /* must be signed (getopt returns -1) */
if (!execparam) close(sfd);
} else {
+ struct hostent *hostinfo;
hostinfo = xgethostbyname(argv[0]);
address.sin_addr = *(struct in_addr *) *hostinfo->h_addr_list;
while (cur) {
sockaddr_to_dotted(cur->ai_addr, str, sizeof(str));
printf("%s %s\nAddress: %s", header, hostname, str);
- if (getnameinfo(cur->ai_addr, cur->ai_addrlen, str, sizeof(str), NULL, 0, NI_NAMEREQD))
+ s[0] = ' ';
+ if (getnameinfo(cur->ai_addr, cur->ai_addrlen, str+1, sizeof(str)-1, NULL, 0, NI_NAMEREQD))
str[0] = '\0';
- printf(" %s\n", str);
+ puts(str);
cur = cur->ai_next;
}
} else {