- if (host) {
- if (flags & NI_NUMERICHOST) {
- if (strlen(inet_ntoa(sin->sin_addr)) >= hostlen)
- return EAI_MEMORY;
-
- strcpy(host, inet_ntoa(sin->sin_addr));
- return 0;
- } else {
- hp = gethostbyaddr((char *)&sin->sin_addr,
- sizeof(struct in_addr), AF_INET);
- if (hp == NULL)
- return EAI_NODATA;
-
- if (strlen(hp->h_name) >= hostlen)
- return EAI_MEMORY;
-
- strcpy(host, hp->h_name);
- return 0;
- }
+ if(serv)
+ snprintf(serv, sizeof(tmpserv), "%d", ntohs(sin->sin_port));
+
+ if(!host)
+ return 0;
+
+ if(flags & NI_NUMERICHOST) {
+ strncpy(host, inet_ntoa(sin->sin_addr), sizeof(host));
+ return 0;