|  | 
 | #include <ngx_config.h> | 
 | #include <ngx_core.h> | 
 |  | 
 |  | 
 | /* AF_INET only */ | 
 |  | 
 | size_t ngx_sock_ntop(int family, struct sockaddr *addr, char *text, size_t len) | 
 | { | 
 |     char                *p; | 
 |     struct sockaddr_in  *addr_in; | 
 |  | 
 |     if (family != AF_INET) { | 
 |         return 0; | 
 |     } | 
 |  | 
 |     addr_in = (struct sockaddr_in *) addr; | 
 |     p = (char *) &addr_in->sin_addr; | 
 |  | 
 |     return ngx_snprintf(text, len > INET_ADDRSTRLEN ? INET_ADDRSTRLEN : len, | 
 |                         "%u.%u.%u.%u", | 
 |                         (unsigned char) p[0], | 
 |                         (unsigned char) p[1], | 
 |                         (unsigned char) p[2], | 
 |                         (unsigned char) p[3]); | 
 | } | 
 |  | 
 |  | 
 | size_t ngx_inet_ntop(int family, char *addr, char *text, size_t len) | 
 | { | 
 |     if (family != AF_INET) { | 
 |         return 0; | 
 |     } | 
 |  | 
 |     return ngx_snprintf(text, len > INET_ADDRSTRLEN ? INET_ADDRSTRLEN : len, | 
 |                         "%u.%u.%u.%u", | 
 |                         (unsigned char) addr[0], | 
 |                         (unsigned char) addr[1], | 
 |                         (unsigned char) addr[2], | 
 |                         (unsigned char) addr[3]); | 
 | } |