- struct in_addr addr;
-
- if (inet_aton(cp, &addr) != 1) {
- /* try resolving if a domain is given */
- struct hostent *host;
- const char *err;
- host = gethostbyname(cp);
- if (host != NULL && h_errno > 0) {
- int i = 0;
- while (host->h_addr_list[i] != 0) {
- addr = *(struct in_addr *) host->h_addr_list[i++];
- fprintf(stderr, "Resolved %s to %s\n", cp, inet_ntoa(addr));
- goto setaddr;
- }
- }
-#ifndef WINDOWS32
- err = hstrerror(h_errno);
-#else
- {
- DWORD wserr = WSAGetLastError();
- switch (wserr) {
- case WSAHOST_NOT_FOUND:
- err = "Host not found";
- break;
- case WSANO_DATA:
- err = "No data record found";
- break;
- default:
- err = "Unknown error";
- break;
- }
- }
-#endif /* !WINDOWS32 */
- errx(1, "error resolving nameserver '%s': %s", cp, err);
- }
-
-setaddr:
- memset(&nameserv, 0, sizeof(nameserv));
- nameserv.sin_family = AF_INET;
- nameserv.sin_port = htons(port);
- nameserv.sin_addr = addr;
+ memcpy(&nameserv, addr, addrlen);
+ nameserv_len = addrlen;