Xinqi Bao's Git
686344b701175f66d94c6e0510a497b1ad14472f
1 /* See LICENSE file for copyright and license details. */
12 ipv4(const char *iface
)
14 struct ifaddrs
*ifaddr
, *ifa
;
16 char host
[NI_MAXHOST
];
18 if (getifaddrs(&ifaddr
) == -1) {
19 fprintf(stderr
, "getifaddrs: %s\n", strerror(errno
));
23 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
24 if (ifa
->ifa_addr
== NULL
) {
27 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in
), host
, NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
28 if ((strcmp(ifa
->ifa_name
, iface
) == 0) && (ifa
->ifa_addr
->sa_family
== AF_INET
)) {
30 fprintf(stderr
, "getnameinfo: %s\n", gai_strerror(s
));
33 return bprintf("%s", host
);
43 ipv6(const char *iface
)
45 struct ifaddrs
*ifaddr
, *ifa
;
47 char host
[NI_MAXHOST
];
49 if (getifaddrs(&ifaddr
) == -1) {
50 fprintf(stderr
, "getifaddrs: %s\n", strerror(errno
));
54 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
55 if (ifa
->ifa_addr
== NULL
) {
58 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in6
), host
, NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
59 if ((strcmp(ifa
->ifa_name
, iface
) == 0) && (ifa
->ifa_addr
->sa_family
== AF_INET6
)) {
61 fprintf(stderr
, "getnameinfo: %s\n", gai_strerror(s
));
64 return bprintf("%s", host
);