这是一个示例函数,它使用 getaddrinfo
函数返回本地主机的 IP 地址:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
// 返回本地主机的 IP 地址
char *get_ip_address() {
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
struct addrinfo *result;
int s = getaddrinfo(NULL, "80", &hints, &result);
if (s != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(s));
exit(EXIT_FAILURE);
}
char host[NI_MAXHOST];
s = getnameinfo(result->ai_addr, result->ai_addrlen, host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
if (s != 0) {
fprintf(stderr, "getnameinfo: %s\n", gai_strerror(s));
exit(EXIT_FAILURE);
}
freeaddrinfo(result);
return strdup(host);
}
注意:这个函数返回的是字符串,因此在使用完毕后应该调用 free
函数来释放内存。