我正在为gethostbyname()
函数编写一个包装器,在返回指向hostent
结构的指针之前,它应该允许执行getaddrinfo()
并最终将返回的 IPv6 结构映射到 IPv4 结构。但是,我在in_addr
正确转换返回的结构以填充地址h_addr_list
时hostent
遇到问题 - 当然,如果家庭标识为 equals AF_INET
。
我基本上在做以下事情:
strcpy(&s[0],name);
hp->h_name = strdup(s);
hp->h_addrtype = AF_INET;
hp->h_length = sizeof(struct in_addr);
struct sockaddr *sa= res->ai_addr;
// Segmentation fault:
memcpy(hp->h_addr_list[0], &(((struct sockaddr_in *)sa)->sin_addr.s_addr), hp->h_length);
有什么提示吗?好久没写C代码了,不好意思问了个愚蠢的问题。谢谢。