acl  3.5.3.0
acl_sane_inet.h
浏览该文件的文档.
1 #ifndef ACL_SANE_INET_INCLUDE_H
2 #define ACL_SANE_INET_INCLUDE_H
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 #include "../stdlib/acl_define.h"
9 
10 #ifdef ACL_UNIX
11 #include <netinet/in.h>
12 #include <sys/un.h>
13 #endif
14 
15 typedef union {
16  struct sockaddr_storage ss;
17 #ifdef AF_INET6
18  struct sockaddr_in6 in6;
19 #endif
20  struct sockaddr_in in;
21 #ifdef ACL_UNIX
22  struct sockaddr_un un;
23 #endif
24  struct sockaddr sa;
25 } ACL_SOCKADDR;
26 
27 /**
28  * 将 socket 地址转为字符串格式,同时支持 IPV4 与 IPV6 及 UNIX 域套接口
29  * @param sa {const struct sockaddr*}
30  * @param buf {char*} 存储转换结果
31  * @param size {size_t} buf 空间大小
32  * @return {size_t} 返回 sockaddr 地址所对应地址类型的实际长度,如对于 IPV4 则
33  * 对应 struct sockaddr_in 的结构体长度,对于 IPV6 则对应 struct sockaddr_in6
34  * 的结构体长度,返回值 0 表示转换出错
35  */
36 ACL_API size_t acl_inet_ntop(const struct sockaddr *sa, char *buf, size_t size);
37 
38 /**
39  * 将字符串表示的地址转为 socket 地址,支持 IPV4 与 IPV6 及 UNIX 域套接口
40  * @param af {int} 地址类型,AF_INET(IPV4)或 AF_INET6(IPV6)
41  * @param src {const char*} 字符串表示的地址,可以为 ip、ip#port 或 ipv4:port
42  * @param dst {struct sockaddr*} 存储转换结果
43  * @return {size_t} 返回对应 IPV4 或 IPV6 地址结构体的大小,如对于 IPV4 则
44  * 对应 struct sockaddr_in 的结构体长度,对于 IPV6 则对应 struct sockaddr_in6
45  * 的结构体长度,返回值 0 表示转换出错
46  */
47 ACL_API size_t acl_inet_pton(int af, const char *src, struct sockaddr *dst);
48 
49 /**
50  * 将字符串表示的地址转为 socket 地址,支持 IPV4 与 IPV6 及 UNIX 域套接口,
51  * 内部将自动探测所给地址字符串的地址类型,即自动区分是 IPV4 还是 IPV6
52  * @param src {const char*} 字符串表示的地址,可以为 ip、ip#port 或 ipv4:port
53  * @param dst {struct sockaddr*} 存储转换结果
54  * @return {size_t} 返回对应 IPV4 或 IPV6 地址结构体的大小,如对于 IPV4 则
55  * 对应 struct sockaddr_in 的结构体长度,对于 IPV6 则对应 struct sockaddr_in6
56  * 的结构体长度,返回值 0 表示转换出错
57  */
58 ACL_API size_t acl_sane_pton(const char *src, struct sockaddr *dst);
59 
60 /**
61  * 将IP地址转换成字符串格式
62  * @param src {const unsigned char*} struct in_addr in.s_addr 的连续内存表示
63  * @param dst {char *} 存储转换结果
64  * @param size {size_t} dst 的空间大小
65  * @return {const char*} NULL: error; !NULL: ok
66  */
67 ACL_API const char *acl_inet_ntop4(const unsigned char *src, char *dst, size_t size);
68 
69 /**
70  * 将IP地址转换成字符串格式
71  * @param in {struct in_addr}
72  * @param dst {char *} 存储转换结果
73  * @param size {size_t} dst 的空间大小
74  * @return {const char*} NULL: error; !NULL: ok
75  */
76 ACL_API const char *acl_inet_ntoa(const struct in_addr in, char *dst, size_t size);
77 
78 #ifdef AF_INET6
79 ACL_API const char *acl_inet6_ntoa(const struct in6_addr in6, char *buf, size_t size);
80 #endif
81 
82 /**
83  * 判断给定的字符串是否是正确的 ip 地址
84  * @param ip {const char *ip}
85  * @return {int} != 0: 是; == 0: 否
86  */
87 ACL_API int acl_is_ip(const char *ip);
88 ACL_API int acl_is_ipv4(const char *ip);
89 ACL_API int acl_is_ipv6(const char *ip);
90 
91 /**
92  * 判断所给的 ip 地址是否符合 xxx.xxx.xxx.xxx:port 格式
93  * @param addr {const char*} IP:PORT 地址
94  * @return {int} 1: 符合, 0: 不符合
95  */
96 ACL_API int acl_ipv4_addr_valid(const char *addr);
97 
98 #ifdef __cplusplus
99 }
100 #endif
101 
102 #endif
103 
ACL_API int acl_is_ip(const char *ip)
ACL_API int acl_is_ipv6(const char *ip)
ACL_API int acl_ipv4_addr_valid(const char *addr)
ACL_API const char * acl_inet_ntoa(const struct in_addr in, char *dst, size_t size)
ACL_API int acl_is_ipv4(const char *ip)
ACL_API size_t acl_inet_pton(int af, const char *src, struct sockaddr *dst)
ACL_API size_t acl_sane_pton(const char *src, struct sockaddr *dst)
ACL_API size_t acl_inet_ntop(const struct sockaddr *sa, char *buf, size_t size)
ACL_API const char * acl_inet_ntop4(const unsigned char *src, char *dst, size_t size)