在套接字编程中,addrinfo
是一个结构体,用于存储 IP 地址和端口号等信息。当我们使用 getaddrinfo()
函数时,它会返回一个指向 addrinfo
结构体的链表,以便我们可以获取有关主机名和服务名的详细信息。
在套接字编程中,getaddrinfo()
函数用于将主机名和服务名转换为 addrinfo
结构体。这个结构体包含了一个套接字地址的详细信息,如 IP 地址、端口号和协议等。
getaddrinfo()
函数的使用示例:
#include <sys/socket.h>
#include <netdb.h>
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
struct addrinfo hints, *res;
int status;
char ipstr[INET6_ADDRSTRLEN];
if (argc != 3) {
fprintf(stderr, "Usage: %s hostname port\n", argv[0]);
exit(1);
}
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
if ((status = getaddrinfo(argv[1], argv[2], &hints, &res)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status));
exit(1);
}
printf("IP addresses for %s:\n", argv[1]);
struct addrinfo *p;
for (p = res; p != NULL; p = p->ai_next) {
void *addr;
char *ipver;
if (p->ai_family == AF_INET) {
struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;
addr = &(ipv4->sin_addr);
ipver = "IPv4";
} else {
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr;
addr = &(ipv6->sin6_addr);
ipver = "IPv6";
}
inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr);
printf("%s: %s\n", ipver, ipstr);
}
freeaddrinfo(res);
return 0;
}
在这个示例中,我们使用 getaddrinfo()
函数将主机名和服务名转换为 IP 地址和端口号,然后打印出结果。
总之,addrinfo
是一个套接字编程中的重要结构体,它可以帮助我们获取有关主机名和服务名的详细信息,以便我们可以使用套接字进行通信。
领取专属 10元无门槛券
手把手带您无忧上云