O-CU-UP
[scp/ocu/5gnr.git] / Include / vos_socket.h
1 /******************************************************************************
2 ###############################################################################
3 #   Copyright (c) [2017-2020] [ICT/CAS]                                        #
4 #   Licensed under the ORAN Software License v1.0 (License)             #
5 ###############################################################################
6 ******************************************************************************/
7
8
9
10 #ifndef __VOS_SOCKET_H__
11 #define __VOS_SOCKET_H__
12
13 #ifdef  __cplusplus
14 extern "C"{
15 #endif
16
17 #include "vos_types.h"
18 #include <unistd.h>
19 #include <sys/un.h>
20 #include <sys/socket.h>
21 #include <netinet/in.h>
22 #include <net/if.h>
23 #include <sys/ioctl.h>
24 #include <netpacket/packet.h>
25 #include "vos_sctp.h"
26 #include "vos_linklist.h"
27
28 /**
29  * socket地址联合体,可用于IPv4,IPv6,和unix类型的socket
30  */
31 typedef union vos_sockaddr_u
32 {
33     struct sockaddr         sa;     ///< 通用结构 
34     struct sockaddr_in      sin;    ///< IPv4 结构 
35     struct sockaddr_in6     sin6;   ///< IPv6 结构
36     struct sockaddr_un      un;     ///< unix 结构 
37     struct sockaddr_ll      raw;    ///< raw 结构
38 }vos_sockaddr_t;
39
40 /**
41  * 协议族
42 */
43 typedef enum vos_domain_e{
44     VOS_AF_UNIX  = AF_UNIX,     ///< unix socket
45     VOS_AF_INET  = AF_INET,     ///< ipv4
46     VOS_AF_INET6 = AF_INET6,    ///< ipv6
47     VOS_AF_PACKET= AF_PACKET,   ///< 用于raw socket
48 }vos_domain_t;
49
50 /**
51  * socket类型
52 */
53 typedef enum vos_socktype_e{
54     VOS_SOCK_STREAM = SOCK_STREAM,  ///< TCP
55     VOS_SOCK_DGRAM  = SOCK_DGRAM,   ///< UDP
56     VOS_SOCK_RAW    = SOCK_RAW,     ///< raw socket
57     VOS_SOCK_SEQPACKET    = SOCK_SEQPACKET,     ///< sctp one2many
58 }vos_socktype_t;
59
60
61 /**
62  * 将IP地址结构转换成IP地址字符串
63  * @param[in ]   af           协议族,VOS_AF_INET 或 VOS_AF_INET6
64  * @param[in ]   src          IP地址结构
65  * @param[out]   dst          用于存储转换结果的buf,
66  * @param[in ]   size         buf的大小
67  * @return       成功返回指向dst的指针,失败返回 NULL
68 */
69 const CHAR *vos_inet_ntop(LONG af, const vos_sockaddr_t *src,CHAR *dst, socklen_t size);
70
71
72 /**
73  * 将IP地址字符串转换成IP地址结构
74  * @param[in ]   af           协议族,VOS_AF_INET 或 VOS_AF_INET6
75  * @param[in ]   src          IP地址字符串
76  * @param[out]   dst          用于存储转换结果的IP地址结构,
77  * @return       成功返回 VOS_OK,失败则返回其他
78 */
79 LONG vos_inet_pton(LONG af, const CHAR *src, vos_sockaddr_t *dst);
80
81
82
83 /**
84  * 创建socket
85  * @param[in ]   domain        协议族
86  * @param[in ]   type          socket类型
87  * @param[out]   protocol      协议,一般填0
88  * @return       成功返回 文件描述符,失败则返回 其他
89 */
90 LONG vos_socket(vos_domain_t domain,vos_socktype_t type,LONG protocol);
91
92 /**
93  * 为socket绑定地址
94  * @param[in ]   sockfd        要绑定的socket
95  * @param[in ]   my_addr       地址结构
96  * @return       成功返回 VOS_OK ,失败则返回 其他
97 */
98 LONG vos_bind(LONG sockfd,vos_sockaddr_t *my_addr);
99
100
101
102 /**
103  * 为socket绑定地址
104  * @param[in ]   sockfd        要绑定的socket
105  * @param[in ]   family        协议族
106  * @param[in ]   port          端口号,当family为 VOS_AF_INET 和 VOS_AF_INET6 有效
107  * @param[in ]   addrStr       地址字符串,
108                                     当family为 VOS_AF_INET 和 VOS_AF_INET6 时为IP地址字符串,
109                                     当family为 VOS_AF_UNIX 时 为本地文件路径字符串
110  * @param[in ]   protocol      协议,当family为 VOS_AF_PACKET 时有效,为协议类型
111  * @param[in ]   ifName        网口名,当family为 VOS_AF_PACKET 时有效,为绑定的网口名
112  * @return       成功返回 VOS_OK ,失败则返回 其他
113 */
114 LONG vos_bind_str(LONG sockfd,vos_domain_t family,SHORT port,const CHAR *addrStr,SHORT protocol,const CHAR *ifName);
115
116
117 /**
118  * 监听socket
119  * @param[in ]   sockfd        欲监听的socket
120  * @param[in ]   maxClient     最大连接数
121  * @return       成功返回 VOS_OK ,失败则返回 其他
122 */
123 LONG vos_listen(LONG sockfd, LONG maxClient);
124
125
126 /**
127  * 获得连接请求
128  * @param[in ]   sockfd        被监听的socket
129  * @param[in ]   addr          客户端地址
130  * @return       成功返回 VOS_OK ,失败则返回 其他
131 */
132 LONG vos_accept(LONG sockfd,vos_sockaddr_t *addr);
133
134
135
136 /**
137  * 建立与指定socket的连接
138  * @param[in ]   sockfd        欲建立连接的socket
139  * @param[in ]   con_addr      服务端地址
140  * @return       成功返回 VOS_OK ,失败则返回 其他
141 */
142 LONG vos_connect(LONG sockfd,vos_sockaddr_t *con_addr);
143
144
145
146 /**
147  * 建立与指定socket的连接
148  * @param[in ]   sockfd        欲建立连接的socket
149  * @param[in ]   family        协议族
150  * @param[in ]   port          端口号,当family为 VOS_AF_INET 和 VOS_AF_INET6 有效
151  * @param[in ]   addrStr       服务端地址字符串,
152                                     当family为 VOS_AF_INET 和 VOS_AF_INET6 时为IP地址字符串,
153                                     当family为 VOS_AF_UNIX 时 为本地文件路径字符串
154  * @return       成功返回 VOS_OK ,失败则返回 其他
155 */
156 LONG vos_connect_str(LONG sockfd,vos_domain_t family,SHORT port,const CHAR *addrStr);
157
158
159 /**
160  * 从已连接的socket的接收数据
161  * @param[in ]   sockfd        已建立连接的socket
162  * @param[in ]   buf           存储数据的缓冲区
163  * @param[in ]   len           buf的大小
164  * @param[in ]   flags         参考 系统 recv 函数
165  * @return       成功返回 接收的字节数 ,失败则返回 VOS_ERROR
166 */
167 LONG vos_recv(LONG sockfd, VOID *buf, size_t len, LONG flags);
168
169 /**
170  * 向已连接的socket的发送数据
171  * @param[in ]   sockfd        已建立连接的socket
172  * @param[in ]   buf           存储数据的缓冲区
173  * @param[in ]   len           buf的大小
174  * @param[in ]   flags         参考 系统 recv 函数
175  * @return       成功返回 发送的字节数 ,失败则返回 VOS_ERROR
176 */
177 LONG vos_send(LONG sockfd, const VOID *buf, size_t len, LONG flags);
178
179 /**
180  * 从socket中接收数据
181  * @param[in ]   sockfd        socket
182  * @param[in ]   buf           存储数据的缓冲区
183  * @param[in ]   len           buf的大小
184  * @param[in ]   flags         参考 系统 recv 函数
185  * @param[in ]   src_addr      数据来源端的地址
186  * @return       成功返回 接收的字节数 ,失败则返回 VOS_ERROR
187 */
188 LONG vos_recvfrom(LONG sockfd, void *buf, size_t len, LONG flags,vos_sockaddr_t *src_addr);
189
190 /**
191  * 向socket中发送数据
192  * @param[in ]   sockfd        socket
193  * @param[in ]   buf           存储数据的缓冲区
194  * @param[in ]   len           buf的大小
195  * @param[in ]   flags         参考 系统 sendto 函数
196  * @param[in ]   dest_addr     数据发送的目的地址
197  * @return       成功返回 发送的字节数 ,失败则返回 VOS_ERROR
198 */
199 LONG vos_sendto(LONG sockfd, const void *buf, size_t len, LONG flags,const vos_sockaddr_t *dest_addr);
200
201
202
203 /**
204  * 获取 本地的 IP 地址
205  * @param[in ]   sockfd        socket
206  * @param[out]   addr          用于存放地址
207  * @return       成功返回 地址个数,失败则返回 VOS_ERROR
208 */
209 LONG vos_getsockname(LONG sockfd,vos_sockaddr_t *addr);
210
211 /**
212  * 获取 对端的 IP 地址
213  * @param[in ]   sockfd       socket
214  * @param[out]   addr         用于存放地址
215  * @return       成功返回 地址个数,失败则返回 VOS_ERROR
216 */
217 LONG vos_getpeername(LONG sockfd, vos_sockaddr_t *addr);
218
219
220 /**
221  * 向raw socket中发送数据
222  * @param[in ]   sockfd        socket
223  * @param[in ]   ifName        用于数据发送的网口名
224  * @param[in ]   buf           存储数据的缓冲区
225  * @param[in ]   len           buf的大小
226  * @param[in ]   flags         参考 系统 sendto 函数
227  * @return       成功返回 发送的字节数 ,失败则返回 VOS_ERROR
228 */
229 LONG vos_raw_sendto(LONG sockfd,const CHAR *ifName, const void *buf, size_t len, LONG flags);
230
231
232 /**
233  * 填充vos_sockaddr_t地址结构
234  * @param[in ]   socket        相关的socket,当family 为VOS_AF_PACKET时有效
235  * @param[out]   my_addr       被填充的 vos_sockaddr_t 变量
236  * @param[in ]   family        协议族
237  * @param[in ]   port          端口号,当family为 VOS_AF_INET 和 VOS_AF_INET6 有效
238  * @param[in ]   addrStr       地址字符串,
239                                     当family为 VOS_AF_INET 和 VOS_AF_INET6 时为IP地址字符串,
240                                     当family为 VOS_AF_UNIX 时 为本地文件路径字符串
241  * @param[in ]   protocol      协议,当family为 VOS_AF_PACKET 时有效,为协议类型
242  * @param[in ]   ifName        网口名,当family为 VOS_AF_PACKET 时有效,为绑定的网口名
243  * @return       成功返回 VOS_OK ,失败则返回 其他
244 */
245 LONG vos_addr_fill(LONG socket,vos_sockaddr_t *my_addr,vos_domain_t family,SHORT port,const CHAR *addrStr,SHORT protocol,const CHAR *ifName);
246
247
248 /**
249  * 获取本机网口的MAC地址
250  * @param[in ]   ifName        网口名
251  * @param[out]   addr          MAC 地址
252  * @return       成功返回 VOS_OK ,失败则返回 其他
253 */
254 LONG vos_get_if_mac_addr(const CHAR *ifName,UCHAR addr[6]);
255
256 /**
257  * 创建unix udp socket,包含创建、绑定和监听
258  * @param[in ]   local_path       本地文件路径
259  * @param[in ]   isbind           是否绑定端口
260  * @return       成功返回 文件描述符,失败则返回 其他
261 */
262 LONG vos_unix_udp_socket_create(const CHAR *local_path,BOOL isbind);
263
264
265 /**
266  * 创建unix tcp socket,包含创建、绑定和监听
267  * @param[in ]   local_path       本地文件路径
268  * @param[in ]   maxClient        最大连接数
269  * @return       成功返回 文件描述符,失败则返回 其他
270 */
271 LONG vos_unix_tcp_server_socket_create(const CHAR *local_path, LONG maxClient);
272
273
274 /**
275  * 创建unix tcp socket,包含创建和连接
276  * @param[in ]   local_path       本地文件路径
277  * @return       成功返回 文件描述符,失败则返回 其他
278 */
279 LONG vos_unix_tcp_client_socket_create(const CHAR *local_path);
280
281
282 /**
283  * 创建tcp socket,包含创建、绑定和监听
284  * @param[in ]   family        VOS_AF_INET 和 VOS_AF_INET6
285  * @param[in ]   addrStr       IPv4/IPv6 地址
286  * @param[in ]   port          端口号
287  * @param[in ]   maxClient     最大连接数
288  * @return       成功返回 文件描述符,失败则返回 其他
289 */
290 LONG vos_tcp_server_socket_create(vos_domain_t family,const CHAR *addrStr,SHORT port, LONG maxClient);
291
292 /**
293  * 创建tcp socket,包含创建和连接
294  * @param[in ]   family        VOS_AF_INET 和 VOS_AF_INET6
295  * @param[in ]   addrStr       IPv4/IPv6 地址
296  * @param[in ]   port          端口号
297  * @return       成功返回 文件描述符,失败则返回 其他
298 */
299 LONG vos_tcp_client_socket_create(vos_domain_t family,const CHAR *addrStr,SHORT port);
300
301 /**
302  * 创建udp socket,包含创建、绑定
303  * @param[in ]   family        VOS_AF_INET 和 VOS_AF_INET6
304  * @param[in ]   addrStr       IPv4/IPv6 地址
305  * @param[in ]   port          端口号
306  * @return       成功返回 文件描述符,失败则返回 其他
307 */
308 LONG vos_udp_server_socket_create(vos_domain_t family,const CHAR *addrStr,SHORT port);
309
310 /**
311  * 创建udp socket,包含创建并返回server 地址结构
312  * @param[in ]   family          VOS_AF_INET 和 VOS_AF_INET6
313  * @param[in ]   s_addrStr       IPv4/IPv6 地址
314  * @param[in ]   s_port          端口号
315  * @param[out]   s_addr          s_addr 由s_addrStr和s_port生成的地址结构
316  * @return       成功返回 文件描述符,失败则返回 其他
317 */
318 LONG vos_udp_client_socket_create(vos_domain_t family,const CHAR *s_addrStr,SHORT s_port,vos_sockaddr_t *s_addr);
319
320
321 /**
322  * 创建raw socket,包含创建、绑定
323  * @param[in ]   protocol      协议
324  * @param[in ]   ifName        网口名
325  * @return       成功返回 文件描述符,失败则返回 其他
326 */
327 LONG vos_raw_server_socket_create(SHORT protocol,const CHAR *ifName);
328
329
330 /**
331  * 创建sctp socket 绑定,可以指定多个地址,
332  * 如果 sock 参数为 IPv4 套接字,则传送给 sctp_bindx() 函数的地址必须为 IPv4 地址。
333  * 如果 sock 参数为 IPv6 套接字,则传送给 sctp_bindx() 函数的地址可以为 IPv4 或 IPv6 地址。
334  * @param[in ]   sockfd        要绑定的socket
335  * @param[in ]   addrs         地址数组
336  * @param[in ]   addrcnt       地址个数
337  * @param[in ]   flags         有如下取值:
338  *                  SCTP_BINDX_ADD_ADDR 指示 SCTP 将给定地址添加到关联中
339  *                  SCTP_BINDX_REM_ADDR 指示 SCTP 从关联中删除给定地址
340  * @return       成功返回 VOS_OK,失败则返回 其他
341 */
342 LONG vos_sctp_bindx(LONG sockfd, vos_sockaddr_t *addrs, LONG addrcnt, LONG flags);
343
344
345 /**
346  * 创建sctp socket 绑定,可以指定多个地址,
347  * 如果 sock 参数为 IPv4 套接字,则传送给 sctp_bindx() 函数的地址必须为 IPv4 地址。
348  * 如果 sock 参数为 IPv6 套接字,则传送给 sctp_bindx() 函数的地址可以为 IPv4 或 IPv6 地址。
349  * @param[in ]   sockfd        要绑定的socket
350  * @param[in ]   family        协议族,VOS_AF_INET 和 VOS_AF_INET6 有效
351  * @param[in ]   port          端口号 
352  * @param[in ]   addrStr       地址字符串数组
353  * @param[in ]   addrcnt       地址个数
354  * @param[in ]   flags         有如下取值:
355  *                  SCTP_BINDX_ADD_ADDR 指示 SCTP 将给定地址添加到关联中
356  *                  SCTP_BINDX_REM_ADDR 指示 SCTP 从关联中删除给定地址
357  * @return       成功返回 VOS_OK,失败则返回 其他
358 */
359 LONG vos_sctp_bindx_str(LONG sockfd,vos_domain_t family,SHORT port,CHAR *addrStr[], LONG addrcnt, LONG flags);
360
361
362
363 /**
364  * 建立与指定socket的连接
365  * @param[in ]   sockfd        欲建立连接的socket
366  * @param[in ]   addrs         地址数组
367  * @param[in ]   addrcnt       地址个数
368  * @param[out]   id            关联ID
369  * @return       成功返回 VOS_OK ,失败则返回 其他
370 */
371 LONG vos_sctp_connectx(LONG sockfd, vos_sockaddr_t *addrs, LONG addrcnt,sctp_assoc_t *id);
372
373
374 /**
375  * 建立与指定socket的连接
376  * @param[in ]   sockfd        欲建立连接的socket
377  * @param[in ]   family        协议族
378  * @param[in ]   port          端口号,当family为 VOS_AF_INET 和 VOS_AF_INET6 有效
379  * @param[in ]   addrStr       地址字符串数组
380  * @param[in ]   addrcnt       地址个数
381  * @param[out]   id            关联ID
382  * @return       成功返回 VOS_OK ,失败则返回 其他
383 */
384 LONG vos_sctp_connectx_str(LONG sockfd,vos_domain_t family,SHORT port,CHAR *addrStr[], LONG addrcnt,sctp_assoc_t *id);
385
386
387 /**
388  * 向socket发送数据
389  * @param[in ]   sockfd        socket
390  * @param[in ]   msg           存储数据的缓冲区
391  * @param[in ]   len           msg的大小
392  * @param[in ]   sinfo         包含用于发送消息的参数。可以指定,流、ppid、TTL、关联 ID等。
393  * @param[in ]   flags         此值在将逻辑运算 OR 以按位形式应用于以下零个或多个标志位时形成:
394  *                              MSG_UNORDERED :设置此标志之后,vos_sctp_sendmsg() 函数将无序传送消息。
395  *                              MSG_ADDR_OVER:设置此标志之后,vos_sctp_sendmsg() 函数将使用 to 参数中的地址,而不使用关联的主要目标地址。此标志仅用于一对多风格 SCTP 套接字。
396  *                              MSG_ABORT:设置此标志之后,指定的关联将异常中止,同时向其对等方发送 ABORT 信号。此标志仅用于一对多风格 SCTP 套接字。
397  *                              MSG_EOF:设置此标志之后,指定的关联将进入正常关闭状态。此标志仅用于一对多风格 SCTP 套接字。
398  * @return       成功返回 发送的字节数 ,失败则返回 VOS_ERROR
399 */
400 LONG vos_sctp_send(LONG sockfd, const void *msg, size_t len,const struct sctp_sndrcvinfo *sinfo, LONG flags);
401
402
403
404 /**
405  * 向socket发送数据
406  * @param[in ]   sockfd        socket
407  * @param[in ]   msg           存储数据的缓冲区
408  * @param[in ]   len           msg的大小
409  * @param[in ]   to            目的地址
410  * @param[in ]   ppid          协议无关的一个自定义值,一般填0即可
411  * @param[in ]   flags         同vos_sctp_send
412  * @param[in ]   stream_no     此消息的目标流
413  * @param[in ]   timetolive    TTL 以毫秒为单位,0表示无限生命期。
414  * @param[in ]   context       一个本地标志,用于检测无法发送到对端的消息,一般填0即可
415  * @return       成功返回 发送的字节数 ,失败则返回 VOS_ERROR
416 */
417 LONG vos_sctp_sendmsg(LONG sockfd, const void *msg, size_t len, vos_sockaddr_t *to,
418                         LONG ppid, LONG flags,
419                         LONG stream_no, LONG timetolive, LONG context);
420
421
422
423 /**
424  * 从socket接收数据
425  * @param[in ]   sockfd        socket
426  * @param[out]   msg           存储数据的缓冲区
427  * @param[in ]   len           msg的大小
428  * @param[in ]   from          源地址
429  * @param[out]   sinfo         包含接收消息的参数。包含流、ppid、TTL、关联 ID等。
430  * @param[out]   msg_flags     同vos_sctp_send
431  * @return       成功返回 接收的字节数 ,失败则返回 VOS_ERROR
432 */
433 LONG vos_sctp_recvmsg(LONG sockfd, void *msg, size_t len, vos_sockaddr_t *from,
434                         struct sctp_sndrcvinfo *sinfo,
435                         LONG *msg_flags);
436
437 /**
438  * 获取 socket 选项参数
439  * @param[in ]   sockfd        sctp socket
440  * @param[in ]   level         选项定义的层次;支持SOL_SOCKET、IPPROTO_SCTP、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6。
441  * @param[in ]   optname       需获取的选项
442  * @param[out]   optval        存放获取的值
443  * @param[in ]   optlen        optval的大小
444  * @param[out]   optlen        获取的大小
445  * @return       成功返回 VOS_OK,失败则返回 其他
446 */
447 LONG vos_getsockopt(LONG sockfd, LONG level, LONG optname,void *optval, socklen_t *optlen);
448
449
450 /**
451  * 设置 socket 选项参数
452  * @param[in ]   sockfd        sctp socket
453  * @param[in ]   level         同 vos_getsockopt
454  * @param[in ]   optname       需设置的选项
455  * @param[in ]   optval        要设置的值
456  * @param[in ]   optlen        optval的大小
457  * @return       成功返回 VOS_OK,失败则返回 其他
458 */
459 LONG vos_setsockopt(LONG sockfd, LONG level, LONG optname,const void *optval, socklen_t optlen);
460
461
462 /**
463  * 关闭文件描述符
464  * @param[in ]   sockfd        socket
465  * @return       成功返回 VOS_OK,失败则返回 其他
466 */
467 LONG vos_close(LONG sockfd);
468
469
470 /**
471  * 从一对多式socket的关联标识id中抽取一个一对一式socket
472  * @param[in ]   sockfd        一对多式socket
473  * @param[in ]   assoc_id      关联标识id
474  * @return       成功返回 文件描述符,失败则返回 其他
475 */
476 LONG vos_sctp_peeloff(LONG sockfd, sctp_assoc_t assoc_id);
477
478
479 /**
480  * 获取 SCTP 相关的 socket 选项参数
481  * @param[in ]   sockfd        sctp socket
482  * @param[in ]   assoc_id      关联标识id
483  * @param[in ]   opt           SCTP 相关的 socket 选项
484  * @param[out]   arg           用于存放参数
485  * @param[out]   size          参数的大小
486  * @return       成功返回 VOS_OK,失败则返回 其他
487 */
488 LONG vos_sctp_opt_info(LONG sockfd, sctp_assoc_t assoc_id, LONG opt, void *arg, socklen_t *size);
489
490
491 /**
492  * 获取 对端的 IP 地址,使用完需要调用 vos_sctp_freepaddrs 释放资源
493  * @param[in ]   sockfd        sctp socket
494  * @param[in ]   assoc_id      关联标识id
495  * @param[out]   addrs         用于存放地址
496  * @return       成功返回 地址个数,失败则返回 VOS_ERROR
497 */
498 LONG vos_sctp_getpaddrs(LONG sockfd, sctp_assoc_t assoc_id,vos_sockaddr_t **addrs);
499
500
501 /**
502  * 释放由 vos_sctp_getpaddrs 函数分配的资源,获取到 0 个时不需要释放
503  * @param[out]   addrs         vos_sctp_getpaddrs 返回的地址
504  * @return       成功返回 VOS_OK ,失败则返回 其他
505 */
506 LONG vos_sctp_freepaddrs(vos_sockaddr_t *addrs);
507
508 /**
509  * 获取 本地的 IP 地址,使用完需要调用 vos_sctp_freepaddrs 释放资源
510  * @param[in ]   sockfd        sctp socket
511  * @param[in ]   assoc_id      关联标识id
512  * @param[out]   addrs         用于存放地址
513  * @return       成功返回 地址个数,失败则返回 VOS_ERROR
514 */
515 LONG vos_sctp_getladdrs(LONG sockfd, sctp_assoc_t assoc_id,vos_sockaddr_t **addrs);
516
517 /**
518  * 释放由 vos_sctp_getladdrs 函数分配的资源,获取到 0 个时不需要释放
519  * @param[out]   addrs         vos_sctp_getladdrs 返回的地址
520  * @return       成功返回 VOS_OK ,失败则返回 其他
521 */
522 LONG vos_sctp_freeladdrs(vos_sockaddr_t *addrs);
523
524 /**
525  * 判断字符串是否为IPv4地址
526  * @param[in ]   str        待判断字符串
527  * @return       是返回 TRUE ,否返回 FALSE
528 */
529 BOOL vos_is_ipv4_addr(CHAR *str);
530
531 /**
532  * 判断字符串是否为IPv6地址
533  * @param[in ]   str        待判断字符串
534  * @return       是返回 TRUE ,否返回 FALSE
535 */
536 BOOL vos_is_ipv6_addr(char *str);
537
538 /**
539  * 判断两个addr是否相等
540  * @param[in ]   addr1        待判断地址结构
541  * @param[in ]   addr2        待判断地址结构
542  * @param[in ]   ignPort      是否忽略端口号
543  * @return       相等则返回0,不相等返回非0
544 */
545 LONG vos_sock_addr_cmp(vos_sockaddr_t *addr1,vos_sockaddr_t *addr2,BOOL ignPort);
546
547
548 /**
549  * addr 地址结构转换成用于打印的字符串
550  * @param[in ]   addr        地址结构
551  * @param[in ]   str         用于存放生成的字符串
552  * @param[in ]   size        str大小
553  * @return       返回指向str的指针
554 */
555 CHAR *vos_addr_showstr(vos_sockaddr_t *addr,CHAR *str,LONG size);
556
557
558 /**
559  * 创建sctp 一对一 socket,包含创建、绑定和监听
560  * @param[in ]   family        VOS_AF_INET 和 VOS_AF_INET6
561  * @param[in ]   addrs         地址数组
562  * @param[in ]   addrcnt       地址个数
563  * @param[in ]   port          端口号
564  * @param[in ]   maxClient     最大连接数
565  * @param[in ]   initmsg       sctp 相关信息
566  * @param[in ]   events        sctp 事件,如果传入 NULL 则默认监听 data_io
567  * @return       成功返回 文件描述符,失败则返回 其他
568 */
569 LONG vos_sctp_server_one2one_create(vos_domain_t family,vos_sockaddr_t *addrs,LONG addrcnt, SHORT port, LONG maxClient,struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events);
570
571 /**
572  * 创建sctp 一对一 socket,包含创建 和 连接
573  * @param[in ]   family        VOS_AF_INET 和 VOS_AF_INET6
574  * @param[in ]   s_addrs       地址数组
575  * @param[in ]   s_addrcnt     地址个数
576  * @param[in ]   s_port        端口号
577  * @param[in ]   initmsg       sctp 相关信息
578  * @param[in ]   events        sctp 事件,如果传入 NULL 则默认监听 data_io
579  * @param[out]   id            sctp_assoc id
580  * @return       成功返回 文件描述符,失败则返回 其他
581 */
582 LONG vos_sctp_client_one2one_create(vos_domain_t family,vos_sockaddr_t *s_addrs,LONG s_addrcnt, SHORT s_port,
583                                                     struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events,sctp_assoc_t *id);
584
585
586 /**
587  * 通过字符串地址创建sctp 一对一 socket,包含创建 和 连接
588  * @param[in ]   family        VOS_AF_INET 和 VOS_AF_INET6
589  * @param[in ]   s_addrStr     地址数组
590  * @param[in ]   s_addrcnt     地址个数
591  * @param[in ]   s_port        端口号
592  * @param[in ]   initmsg       sctp 相关信息
593  * @param[in ]   events        sctp 事件,如果传入 NULL 则默认监听 data_io
594  * @param[out]   id            sctp_assoc id
595  * @return       成功返回 文件描述符,失败则返回 其他
596 */
597 LONG vos_sctp_client_one2one_str_create(vos_domain_t family,CHAR *s_addrStr[],LONG s_addrcnt, SHORT s_port,
598                                                     struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events,sctp_assoc_t *id);
599
600
601 /**
602  * 创建sctp 一对一 socket,包含创建、绑定和监听
603  * @param[in ]   family        VOS_AF_INET 和 VOS_AF_INET6
604  * @param[in ]   addrStr       地址字符串数组
605  * @param[in ]   addrcnt       地址个数
606  * @param[in ]   port          端口号
607  * @param[in ]   maxClient     最大连接数
608  * @param[in ]   initmsg       sctp 相关信息
609  * @param[in ]   events        sctp 事件,如果传入 NULL 则默认监听 data_io
610  * @return       成功返回 文件描述符,失败则返回 其他
611 */
612 LONG vos_sctp_server_one2one_str_create(vos_domain_t family,CHAR *addrStr[],LONG addrcnt, SHORT port, LONG maxClient,struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events);
613
614
615 /**
616  * 创建sctp 一对多 socket,包含创建、绑定和监听
617  * @param[in ]   family        VOS_AF_INET 和 VOS_AF_INET6
618  * @param[in ]   addrs         地址数组
619  * @param[in ]   addrcnt       地址个数
620  * @param[in ]   port          端口号
621  * @param[in ]   maxClient     最大连接数
622  * @param[in ]   initmsg       sctp 相关信息
623  * @param[in ]   events        sctp 事件,如果传入 NULL 则默认监听 data_io
624  * @return       成功返回 文件描述符,失败则返回 其他
625 */
626 LONG vos_sctp_server_one2many_create(vos_domain_t family,vos_sockaddr_t *addrs,LONG addrcnt, SHORT port, LONG maxClient,struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events);
627
628 /**
629  * 创建sctp 一对多 socket,包含创建
630  * @param[in ]   family        VOS_AF_INET 和 VOS_AF_INET6
631  * @param[in ]   s_addrs       地址数组
632  * @param[in ]   s_addrcnt     地址个数
633  * @param[in ]   s_port        端口号
634  * @param[in ]   initmsg       sctp 相关信息
635  * @param[in ]   events        sctp 事件,如果传入 NULL 则默认监听 data_io
636  * @return       成功返回 文件描述符,失败则返回 其他
637 */
638 LONG vos_sctp_client_one2many_create(vos_domain_t family,vos_sockaddr_t *s_addrs,LONG s_addrcnt, SHORT s_port,
639                                                struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events);
640
641 /**
642  * 创建sctp 一对多 socket,包含创建、绑定和监听
643  * @param[in ]   family        VOS_AF_INET 和 VOS_AF_INET6
644  * @param[in ]   addrStr       地址字符串数组
645  * @param[in ]   addrcnt       地址个数
646  * @param[in ]   port          端口号
647  * @param[in ]   maxClient     最大连接数
648  * @param[in ]   initmsg       sctp 相关信息
649  * @param[in ]   events        sctp 事件,如果传入 NULL 则默认监听 data_io
650  * @return       成功返回 文件描述符,失败则返回 其他
651 */
652 LONG vos_sctp_server_one2many_str_create(vos_domain_t family,CHAR *addrStr[],LONG addrcnt, SHORT port, LONG maxClient,struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events);
653
654 /**
655  * 通过字符串地址创建sctp 一对多 socket,包含创建
656  * @param[in ]   family        VOS_AF_INET 和 VOS_AF_INET6
657  * @param[in ]   s_addrStr     地址数组
658  * @param[in ]   s_addrcnt     地址个数
659  * @param[in ]   s_port        端口号
660  * @param[in ]   initmsg       sctp 相关信息
661  * @param[in ]   events        sctp 事件,如果传入 NULL 则默认监听 data_io
662  * @return       成功返回 文件描述符,失败则返回 其他
663 */
664 LONG vos_sctp_client_one2many_str_create(vos_domain_t family,CHAR *s_addrStr[],LONG s_addrcnt, SHORT s_port,
665                                                      struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events);
666
667
668 LONG vos_udp_client_socket_create_bind(vos_domain_t family,const CHAR *s_addrStr,SHORT s_port,vos_sockaddr_t *s_addr,vos_sockaddr_t *my_addr);
669
670 LONG vos_tcp_client_socket_create_bind(vos_domain_t family,const CHAR *addrStr,SHORT port,vos_sockaddr_t *my_addr);
671
672 LONG vos_sctp_client_one2one_create_bind(vos_domain_t family,vos_sockaddr_t *s_addrs,LONG s_addrcnt, SHORT s_port,
673                                                     struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events,sctp_assoc_t *id,
674                                                     vos_sockaddr_t *my_addrs,LONG my_addrcnt);
675
676 LONG vos_sctp_client_one2many_create_bind(vos_domain_t family,vos_sockaddr_t *s_addrs,LONG s_addrcnt, SHORT s_port,
677                                                struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events,
678                                                vos_sockaddr_t *my_addrs,LONG my_addrcnt);
679
680
681 #ifdef  __cplusplus
682 }
683 #endif  /* end of __cplusplus */
684
685 #endif  /* end of __VOS_SOCKET_H__ */
686