Xinqi Bao's Git
1 /* See LICENSE file for copyright and license details. */
7 #if defined(__OpenBSD__)
9 #include <sys/socket.h>
15 ipv4(const char *iface
)
17 struct ifaddrs
*ifaddr
, *ifa
;
19 char host
[NI_MAXHOST
];
21 if (getifaddrs(&ifaddr
) == -1) {
22 fprintf(stderr
, "getifaddrs: %s\n", strerror(errno
));
26 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
27 if (ifa
->ifa_addr
== NULL
) {
30 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in
), host
, NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
31 if ((strcmp(ifa
->ifa_name
, iface
) == 0) && (ifa
->ifa_addr
->sa_family
== AF_INET
)) {
33 fprintf(stderr
, "getnameinfo: %s\n", gai_strerror(s
));
36 return bprintf("%s", host
);
46 ipv6(const char *iface
)
48 struct ifaddrs
*ifaddr
, *ifa
;
50 char host
[NI_MAXHOST
];
52 if (getifaddrs(&ifaddr
) == -1) {
53 fprintf(stderr
, "getifaddrs: %s\n", strerror(errno
));
57 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
58 if (ifa
->ifa_addr
== NULL
) {
61 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in6
), host
, NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
62 if ((strcmp(ifa
->ifa_name
, iface
) == 0) && (ifa
->ifa_addr
->sa_family
== AF_INET6
)) {
64 fprintf(stderr
, "getnameinfo: %s\n", gai_strerror(s
));
67 return bprintf("%s", host
);