C language access to the local ip

I. Reference Site

  1, c language access to the local IP

Second, the source

 1 #include <stdio.h>
 2 #include <stdint.h>
 3 #include <stdlib.h>
 4 #include <stdarg.h>
 5 #include <time.h>
 6 #include <sys/time.h>
 7 #include <pthread.h>
 8 #include <netinet/in.h>
 9 #include <arpa/inet.h>
10 #include <sys/socket.h>
11 #include <netdb.h>
12 #include <signal.h>
13 #include <sys/types.h>
14 #include <unistd.h>
15 #include <ctype.h>
16 #include <ifaddrs.h>
17 #include <string.h>
18 #include <assert.h>
19 #include <poll.h>
20 #include <errno.h>
21  
22 static char *getip()
23 {
24     struct ifaddrs *ifaddr, *ifa;
25     int family, s;
26     char *host = NULL;
27  
28     if (getifaddrs(&ifaddr) == -1) {
29         perror("getifaddrs");
30         return NULL;
31     }
32  
33     for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
34         if (ifa->ifa_addr == NULL)
35             continue;
36  
37         family = ifa->ifa_addr->sa_family;
38  
39         if (!strcmp(ifa->ifa_name, "lo"))
40             continue;
41         if (family == AF_INET) {
42             if ((host = malloc(NI_MAXHOST)) == NULL)
43                 return NULL;
44             s = getnameinfo(ifa->ifa_addr,
45                     (family == AF_INET) ? sizeof(struct sockaddr_in) :
46                     sizeof(struct sockaddr_in6),
47                     host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
48             if (s != 0) {
49                 return NULL;
50             }
51             freeifaddrs(ifaddr);
52             return host;
53         }
54     }
55     return NULL;
56 }

 

Guess you like

Origin www.cnblogs.com/shanyu20/p/11929223.html