1 /******************************************************************************
3 * Copyright (c) 2020 ICT/CAS.
5 * Licensed under the O-RAN Software License, Version 1.0 (the "Software License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * https://www.o-ran.org/software
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 *******************************************************************************/
22 #ifndef __VOS_SOCKET_H__
23 #define __VOS_SOCKET_H__
29 #include "vos_types.h"
32 #include <sys/socket.h>
33 #include <netinet/in.h>
35 #include <sys/ioctl.h>
36 #include <netpacket/packet.h>
38 #include "vos_linklist.h"
41 * socket地址联合体,可用于IPv4,IPv6,和unix类型的socket
43 typedef union vos_sockaddr_u
45 struct sockaddr sa; ///< 通用结构
46 struct sockaddr_in sin; ///< IPv4 结构
47 struct sockaddr_in6 sin6; ///< IPv6 结构
48 struct sockaddr_un un; ///< unix 结构
49 struct sockaddr_ll raw; ///< raw 结构
55 typedef enum vos_domain_e{
56 VOS_AF_UNIX = AF_UNIX, ///< unix socket
57 VOS_AF_INET = AF_INET, ///< ipv4
58 VOS_AF_INET6 = AF_INET6, ///< ipv6
59 VOS_AF_PACKET= AF_PACKET, ///< 用于raw socket
65 typedef enum vos_socktype_e{
66 VOS_SOCK_STREAM = SOCK_STREAM, ///< TCP
67 VOS_SOCK_DGRAM = SOCK_DGRAM, ///< UDP
68 VOS_SOCK_RAW = SOCK_RAW, ///< raw socket
69 VOS_SOCK_SEQPACKET = SOCK_SEQPACKET, ///< sctp one2many
75 * @param[in ] af 协议族,VOS_AF_INET 或 VOS_AF_INET6
76 * @param[in ] src IP地址结构
77 * @param[out] dst 用于存储转换结果的buf,
78 * @param[in ] size buf的大小
79 * @return 成功返回指向dst的指针,失败返回 NULL
81 const CHAR *vos_inet_ntop(LONG af, const vos_sockaddr_t *src,CHAR *dst, socklen_t size);
86 * @param[in ] af 协议族,VOS_AF_INET 或 VOS_AF_INET6
87 * @param[in ] src IP地址字符串
88 * @param[out] dst 用于存储转换结果的IP地址结构,
89 * @return 成功返回 VOS_OK,失败则返回其他
91 LONG vos_inet_pton(LONG af, const CHAR *src, vos_sockaddr_t *dst);
97 * @param[in ] domain 协议族
98 * @param[in ] type socket类型
99 * @param[out] protocol 协议,一般填0
100 * @return 成功返回 文件描述符,失败则返回 其他
102 LONG vos_socket(vos_domain_t domain,vos_socktype_t type,LONG protocol);
106 * @param[in ] sockfd 要绑定的socket
107 * @param[in ] my_addr 地址结构
108 * @return 成功返回 VOS_OK ,失败则返回 其他
110 LONG vos_bind(LONG sockfd,vos_sockaddr_t *my_addr);
116 * @param[in ] sockfd 要绑定的socket
117 * @param[in ] family 协议族
118 * @param[in ] port 端口号,当family为 VOS_AF_INET 和 VOS_AF_INET6 有效
119 * @param[in ] addrStr 地址字符串,
120 当family为 VOS_AF_INET 和 VOS_AF_INET6 时为IP地址字符串,
121 当family为 VOS_AF_UNIX 时 为本地文件路径字符串
122 * @param[in ] protocol 协议,当family为 VOS_AF_PACKET 时有效,为协议类型
123 * @param[in ] ifName 网口名,当family为 VOS_AF_PACKET 时有效,为绑定的网口名
124 * @return 成功返回 VOS_OK ,失败则返回 其他
126 LONG vos_bind_str(LONG sockfd,vos_domain_t family,SHORT port,const CHAR *addrStr,SHORT protocol,const CHAR *ifName);
131 * @param[in ] sockfd 欲监听的socket
132 * @param[in ] maxClient 最大连接数
133 * @return 成功返回 VOS_OK ,失败则返回 其他
135 LONG vos_listen(LONG sockfd, LONG maxClient);
140 * @param[in ] sockfd 被监听的socket
141 * @param[in ] addr 客户端地址
142 * @return 成功返回 VOS_OK ,失败则返回 其他
144 LONG vos_accept(LONG sockfd,vos_sockaddr_t *addr);
150 * @param[in ] sockfd 欲建立连接的socket
151 * @param[in ] con_addr 服务端地址
152 * @return 成功返回 VOS_OK ,失败则返回 其他
154 LONG vos_connect(LONG sockfd,vos_sockaddr_t *con_addr);
160 * @param[in ] sockfd 欲建立连接的socket
161 * @param[in ] family 协议族
162 * @param[in ] port 端口号,当family为 VOS_AF_INET 和 VOS_AF_INET6 有效
163 * @param[in ] addrStr 服务端地址字符串,
164 当family为 VOS_AF_INET 和 VOS_AF_INET6 时为IP地址字符串,
165 当family为 VOS_AF_UNIX 时 为本地文件路径字符串
166 * @return 成功返回 VOS_OK ,失败则返回 其他
168 LONG vos_connect_str(LONG sockfd,vos_domain_t family,SHORT port,const CHAR *addrStr);
173 * @param[in ] sockfd 已建立连接的socket
174 * @param[in ] buf 存储数据的缓冲区
175 * @param[in ] len buf的大小
176 * @param[in ] flags 参考 系统 recv 函数
177 * @return 成功返回 接收的字节数 ,失败则返回 VOS_ERROR
179 LONG vos_recv(LONG sockfd, VOID *buf, size_t len, LONG flags);
183 * @param[in ] sockfd 已建立连接的socket
184 * @param[in ] buf 存储数据的缓冲区
185 * @param[in ] len buf的大小
186 * @param[in ] flags 参考 系统 recv 函数
187 * @return 成功返回 发送的字节数 ,失败则返回 VOS_ERROR
189 LONG vos_send(LONG sockfd, const VOID *buf, size_t len, LONG flags);
193 * @param[in ] sockfd socket
194 * @param[in ] buf 存储数据的缓冲区
195 * @param[in ] len buf的大小
196 * @param[in ] flags 参考 系统 recv 函数
197 * @param[in ] src_addr 数据来源端的地址
198 * @return 成功返回 接收的字节数 ,失败则返回 VOS_ERROR
200 LONG vos_recvfrom(LONG sockfd, void *buf, size_t len, LONG flags,vos_sockaddr_t *src_addr);
204 * @param[in ] sockfd socket
205 * @param[in ] buf 存储数据的缓冲区
206 * @param[in ] len buf的大小
207 * @param[in ] flags 参考 系统 sendto 函数
208 * @param[in ] dest_addr 数据发送的目的地址
209 * @return 成功返回 发送的字节数 ,失败则返回 VOS_ERROR
211 LONG vos_sendto(LONG sockfd, const void *buf, size_t len, LONG flags,const vos_sockaddr_t *dest_addr);
217 * @param[in ] sockfd socket
218 * @param[out] addr 用于存放地址
219 * @return 成功返回 地址个数,失败则返回 VOS_ERROR
221 LONG vos_getsockname(LONG sockfd,vos_sockaddr_t *addr);
225 * @param[in ] sockfd socket
226 * @param[out] addr 用于存放地址
227 * @return 成功返回 地址个数,失败则返回 VOS_ERROR
229 LONG vos_getpeername(LONG sockfd, vos_sockaddr_t *addr);
234 * @param[in ] sockfd socket
235 * @param[in ] ifName 用于数据发送的网口名
236 * @param[in ] buf 存储数据的缓冲区
237 * @param[in ] len buf的大小
238 * @param[in ] flags 参考 系统 sendto 函数
239 * @return 成功返回 发送的字节数 ,失败则返回 VOS_ERROR
241 LONG vos_raw_sendto(LONG sockfd,const CHAR *ifName, const void *buf, size_t len, LONG flags);
245 * 填充vos_sockaddr_t地址结构
246 * @param[in ] socket 相关的socket,当family 为VOS_AF_PACKET时有效
247 * @param[out] my_addr 被填充的 vos_sockaddr_t 变量
248 * @param[in ] family 协议族
249 * @param[in ] port 端口号,当family为 VOS_AF_INET 和 VOS_AF_INET6 有效
250 * @param[in ] addrStr 地址字符串,
251 当family为 VOS_AF_INET 和 VOS_AF_INET6 时为IP地址字符串,
252 当family为 VOS_AF_UNIX 时 为本地文件路径字符串
253 * @param[in ] protocol 协议,当family为 VOS_AF_PACKET 时有效,为协议类型
254 * @param[in ] ifName 网口名,当family为 VOS_AF_PACKET 时有效,为绑定的网口名
255 * @return 成功返回 VOS_OK ,失败则返回 其他
257 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);
262 * @param[in ] ifName 网口名
263 * @param[out] addr MAC 地址
264 * @return 成功返回 VOS_OK ,失败则返回 其他
266 LONG vos_get_if_mac_addr(const CHAR *ifName,UCHAR addr[6]);
269 * 创建unix udp socket,包含创建、绑定和监听
270 * @param[in ] local_path 本地文件路径
271 * @param[in ] isbind 是否绑定端口
272 * @return 成功返回 文件描述符,失败则返回 其他
274 LONG vos_unix_udp_socket_create(const CHAR *local_path,BOOL isbind);
278 * 创建unix tcp socket,包含创建、绑定和监听
279 * @param[in ] local_path 本地文件路径
280 * @param[in ] maxClient 最大连接数
281 * @return 成功返回 文件描述符,失败则返回 其他
283 LONG vos_unix_tcp_server_socket_create(const CHAR *local_path, LONG maxClient);
287 * 创建unix tcp socket,包含创建和连接
288 * @param[in ] local_path 本地文件路径
289 * @return 成功返回 文件描述符,失败则返回 其他
291 LONG vos_unix_tcp_client_socket_create(const CHAR *local_path);
295 * 创建tcp socket,包含创建、绑定和监听
296 * @param[in ] family VOS_AF_INET 和 VOS_AF_INET6
297 * @param[in ] addrStr IPv4/IPv6 地址
298 * @param[in ] port 端口号
299 * @param[in ] maxClient 最大连接数
300 * @return 成功返回 文件描述符,失败则返回 其他
302 LONG vos_tcp_server_socket_create(vos_domain_t family,const CHAR *addrStr,SHORT port, LONG maxClient);
305 * 创建tcp socket,包含创建和连接
306 * @param[in ] family VOS_AF_INET 和 VOS_AF_INET6
307 * @param[in ] addrStr IPv4/IPv6 地址
308 * @param[in ] port 端口号
309 * @return 成功返回 文件描述符,失败则返回 其他
311 LONG vos_tcp_client_socket_create(vos_domain_t family,const CHAR *addrStr,SHORT port);
314 * 创建udp socket,包含创建、绑定
315 * @param[in ] family VOS_AF_INET 和 VOS_AF_INET6
316 * @param[in ] addrStr IPv4/IPv6 地址
317 * @param[in ] port 端口号
318 * @return 成功返回 文件描述符,失败则返回 其他
320 LONG vos_udp_server_socket_create(vos_domain_t family,const CHAR *addrStr,SHORT port);
323 * 创建udp socket,包含创建并返回server 地址结构
324 * @param[in ] family VOS_AF_INET 和 VOS_AF_INET6
325 * @param[in ] s_addrStr IPv4/IPv6 地址
326 * @param[in ] s_port 端口号
327 * @param[out] s_addr s_addr 由s_addrStr和s_port生成的地址结构
328 * @return 成功返回 文件描述符,失败则返回 其他
330 LONG vos_udp_client_socket_create(vos_domain_t family,const CHAR *s_addrStr,SHORT s_port,vos_sockaddr_t *s_addr);
334 * 创建raw socket,包含创建、绑定
335 * @param[in ] protocol 协议
336 * @param[in ] ifName 网口名
337 * @return 成功返回 文件描述符,失败则返回 其他
339 LONG vos_raw_server_socket_create(SHORT protocol,const CHAR *ifName);
343 * 创建sctp socket 绑定,可以指定多个地址,
344 * 如果 sock 参数为 IPv4 套接字,则传送给 sctp_bindx() 函数的地址必须为 IPv4 地址。
345 * 如果 sock 参数为 IPv6 套接字,则传送给 sctp_bindx() 函数的地址可以为 IPv4 或 IPv6 地址。
346 * @param[in ] sockfd 要绑定的socket
347 * @param[in ] addrs 地址数组
348 * @param[in ] addrcnt 地址个数
349 * @param[in ] flags 有如下取值:
350 * SCTP_BINDX_ADD_ADDR 指示 SCTP 将给定地址添加到关联中
351 * SCTP_BINDX_REM_ADDR 指示 SCTP 从关联中删除给定地址
352 * @return 成功返回 VOS_OK,失败则返回 其他
354 LONG vos_sctp_bindx(LONG sockfd, vos_sockaddr_t *addrs, LONG addrcnt, LONG flags);
358 * 创建sctp socket 绑定,可以指定多个地址,
359 * 如果 sock 参数为 IPv4 套接字,则传送给 sctp_bindx() 函数的地址必须为 IPv4 地址。
360 * 如果 sock 参数为 IPv6 套接字,则传送给 sctp_bindx() 函数的地址可以为 IPv4 或 IPv6 地址。
361 * @param[in ] sockfd 要绑定的socket
362 * @param[in ] family 协议族,VOS_AF_INET 和 VOS_AF_INET6 有效
363 * @param[in ] port 端口号
364 * @param[in ] addrStr 地址字符串数组
365 * @param[in ] addrcnt 地址个数
366 * @param[in ] flags 有如下取值:
367 * SCTP_BINDX_ADD_ADDR 指示 SCTP 将给定地址添加到关联中
368 * SCTP_BINDX_REM_ADDR 指示 SCTP 从关联中删除给定地址
369 * @return 成功返回 VOS_OK,失败则返回 其他
371 LONG vos_sctp_bindx_str(LONG sockfd,vos_domain_t family,SHORT port,CHAR *addrStr[], LONG addrcnt, LONG flags);
377 * @param[in ] sockfd 欲建立连接的socket
378 * @param[in ] addrs 地址数组
379 * @param[in ] addrcnt 地址个数
380 * @param[out] id 关联ID
381 * @return 成功返回 VOS_OK ,失败则返回 其他
383 LONG vos_sctp_connectx(LONG sockfd, vos_sockaddr_t *addrs, LONG addrcnt,sctp_assoc_t *id);
388 * @param[in ] sockfd 欲建立连接的socket
389 * @param[in ] family 协议族
390 * @param[in ] port 端口号,当family为 VOS_AF_INET 和 VOS_AF_INET6 有效
391 * @param[in ] addrStr 地址字符串数组
392 * @param[in ] addrcnt 地址个数
393 * @param[out] id 关联ID
394 * @return 成功返回 VOS_OK ,失败则返回 其他
396 LONG vos_sctp_connectx_str(LONG sockfd,vos_domain_t family,SHORT port,CHAR *addrStr[], LONG addrcnt,sctp_assoc_t *id);
401 * @param[in ] sockfd socket
402 * @param[in ] msg 存储数据的缓冲区
403 * @param[in ] len msg的大小
404 * @param[in ] sinfo 包含用于发送消息的参数。可以指定,流、ppid、TTL、关联 ID等。
405 * @param[in ] flags 此值在将逻辑运算 OR 以按位形式应用于以下零个或多个标志位时形成:
406 * MSG_UNORDERED :设置此标志之后,vos_sctp_sendmsg() 函数将无序传送消息。
407 * MSG_ADDR_OVER:设置此标志之后,vos_sctp_sendmsg() 函数将使用 to 参数中的地址,而不使用关联的主要目标地址。此标志仅用于一对多风格 SCTP 套接字。
408 * MSG_ABORT:设置此标志之后,指定的关联将异常中止,同时向其对等方发送 ABORT 信号。此标志仅用于一对多风格 SCTP 套接字。
409 * MSG_EOF:设置此标志之后,指定的关联将进入正常关闭状态。此标志仅用于一对多风格 SCTP 套接字。
410 * @return 成功返回 发送的字节数 ,失败则返回 VOS_ERROR
412 LONG vos_sctp_send(LONG sockfd, const void *msg, size_t len,const struct sctp_sndrcvinfo *sinfo, LONG flags);
418 * @param[in ] sockfd socket
419 * @param[in ] msg 存储数据的缓冲区
420 * @param[in ] len msg的大小
421 * @param[in ] to 目的地址
422 * @param[in ] ppid 协议无关的一个自定义值,一般填0即可
423 * @param[in ] flags 同vos_sctp_send
424 * @param[in ] stream_no 此消息的目标流
425 * @param[in ] timetolive TTL 以毫秒为单位,0表示无限生命期。
426 * @param[in ] context 一个本地标志,用于检测无法发送到对端的消息,一般填0即可
427 * @return 成功返回 发送的字节数 ,失败则返回 VOS_ERROR
429 LONG vos_sctp_sendmsg(LONG sockfd, const void *msg, size_t len, vos_sockaddr_t *to,
430 LONG ppid, LONG flags,
431 LONG stream_no, LONG timetolive, LONG context);
437 * @param[in ] sockfd socket
438 * @param[out] msg 存储数据的缓冲区
439 * @param[in ] len msg的大小
440 * @param[in ] from 源地址
441 * @param[out] sinfo 包含接收消息的参数。包含流、ppid、TTL、关联 ID等。
442 * @param[out] msg_flags 同vos_sctp_send
443 * @return 成功返回 接收的字节数 ,失败则返回 VOS_ERROR
445 LONG vos_sctp_recvmsg(LONG sockfd, void *msg, size_t len, vos_sockaddr_t *from,
446 struct sctp_sndrcvinfo *sinfo,
451 * @param[in ] sockfd sctp socket
452 * @param[in ] level 选项定义的层次;支持SOL_SOCKET、IPPROTO_SCTP、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6。
453 * @param[in ] optname 需获取的选项
454 * @param[out] optval 存放获取的值
455 * @param[in ] optlen optval的大小
456 * @param[out] optlen 获取的大小
457 * @return 成功返回 VOS_OK,失败则返回 其他
459 LONG vos_getsockopt(LONG sockfd, LONG level, LONG optname,void *optval, socklen_t *optlen);
464 * @param[in ] sockfd sctp socket
465 * @param[in ] level 同 vos_getsockopt
466 * @param[in ] optname 需设置的选项
467 * @param[in ] optval 要设置的值
468 * @param[in ] optlen optval的大小
469 * @return 成功返回 VOS_OK,失败则返回 其他
471 LONG vos_setsockopt(LONG sockfd, LONG level, LONG optname,const void *optval, socklen_t optlen);
476 * @param[in ] sockfd socket
477 * @return 成功返回 VOS_OK,失败则返回 其他
479 LONG vos_close(LONG sockfd);
483 * 从一对多式socket的关联标识id中抽取一个一对一式socket
484 * @param[in ] sockfd 一对多式socket
485 * @param[in ] assoc_id 关联标识id
486 * @return 成功返回 文件描述符,失败则返回 其他
488 LONG vos_sctp_peeloff(LONG sockfd, sctp_assoc_t assoc_id);
492 * 获取 SCTP 相关的 socket 选项参数
493 * @param[in ] sockfd sctp socket
494 * @param[in ] assoc_id 关联标识id
495 * @param[in ] opt SCTP 相关的 socket 选项
496 * @param[out] arg 用于存放参数
497 * @param[out] size 参数的大小
498 * @return 成功返回 VOS_OK,失败则返回 其他
500 LONG vos_sctp_opt_info(LONG sockfd, sctp_assoc_t assoc_id, LONG opt, void *arg, socklen_t *size);
504 * 获取 对端的 IP 地址,使用完需要调用 vos_sctp_freepaddrs 释放资源
505 * @param[in ] sockfd sctp socket
506 * @param[in ] assoc_id 关联标识id
507 * @param[out] addrs 用于存放地址
508 * @return 成功返回 地址个数,失败则返回 VOS_ERROR
510 LONG vos_sctp_getpaddrs(LONG sockfd, sctp_assoc_t assoc_id,vos_sockaddr_t **addrs);
514 * 释放由 vos_sctp_getpaddrs 函数分配的资源,获取到 0 个时不需要释放
515 * @param[out] addrs vos_sctp_getpaddrs 返回的地址
516 * @return 成功返回 VOS_OK ,失败则返回 其他
518 LONG vos_sctp_freepaddrs(vos_sockaddr_t *addrs);
521 * 获取 本地的 IP 地址,使用完需要调用 vos_sctp_freepaddrs 释放资源
522 * @param[in ] sockfd sctp socket
523 * @param[in ] assoc_id 关联标识id
524 * @param[out] addrs 用于存放地址
525 * @return 成功返回 地址个数,失败则返回 VOS_ERROR
527 LONG vos_sctp_getladdrs(LONG sockfd, sctp_assoc_t assoc_id,vos_sockaddr_t **addrs);
530 * 释放由 vos_sctp_getladdrs 函数分配的资源,获取到 0 个时不需要释放
531 * @param[out] addrs vos_sctp_getladdrs 返回的地址
532 * @return 成功返回 VOS_OK ,失败则返回 其他
534 LONG vos_sctp_freeladdrs(vos_sockaddr_t *addrs);
538 * @param[in ] str 待判断字符串
539 * @return 是返回 TRUE ,否返回 FALSE
541 BOOL vos_is_ipv4_addr(CHAR *str);
545 * @param[in ] str 待判断字符串
546 * @return 是返回 TRUE ,否返回 FALSE
548 BOOL vos_is_ipv6_addr(char *str);
552 * @param[in ] addr1 待判断地址结构
553 * @param[in ] addr2 待判断地址结构
554 * @param[in ] ignPort 是否忽略端口号
555 * @return 相等则返回0,不相等返回非0
557 LONG vos_sock_addr_cmp(vos_sockaddr_t *addr1,vos_sockaddr_t *addr2,BOOL ignPort);
561 * addr 地址结构转换成用于打印的字符串
562 * @param[in ] addr 地址结构
563 * @param[in ] str 用于存放生成的字符串
564 * @param[in ] size str大小
567 CHAR *vos_addr_showstr(vos_sockaddr_t *addr,CHAR *str,LONG size);
571 * 创建sctp 一对一 socket,包含创建、绑定和监听
572 * @param[in ] family VOS_AF_INET 和 VOS_AF_INET6
573 * @param[in ] addrs 地址数组
574 * @param[in ] addrcnt 地址个数
575 * @param[in ] port 端口号
576 * @param[in ] maxClient 最大连接数
577 * @param[in ] initmsg sctp 相关信息
578 * @param[in ] events sctp 事件,如果传入 NULL 则默认监听 data_io
579 * @return 成功返回 文件描述符,失败则返回 其他
581 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);
584 * 创建sctp 一对一 socket,包含创建 和 连接
585 * @param[in ] family VOS_AF_INET 和 VOS_AF_INET6
586 * @param[in ] s_addrs 地址数组
587 * @param[in ] s_addrcnt 地址个数
588 * @param[in ] s_port 端口号
589 * @param[in ] initmsg sctp 相关信息
590 * @param[in ] events sctp 事件,如果传入 NULL 则默认监听 data_io
591 * @param[out] id sctp_assoc id
592 * @return 成功返回 文件描述符,失败则返回 其他
594 LONG vos_sctp_client_one2one_create(vos_domain_t family,vos_sockaddr_t *s_addrs,LONG s_addrcnt, SHORT s_port,
595 struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events,sctp_assoc_t *id);
599 * 通过字符串地址创建sctp 一对一 socket,包含创建 和 连接
600 * @param[in ] family VOS_AF_INET 和 VOS_AF_INET6
601 * @param[in ] s_addrStr 地址数组
602 * @param[in ] s_addrcnt 地址个数
603 * @param[in ] s_port 端口号
604 * @param[in ] initmsg sctp 相关信息
605 * @param[in ] events sctp 事件,如果传入 NULL 则默认监听 data_io
606 * @param[out] id sctp_assoc id
607 * @return 成功返回 文件描述符,失败则返回 其他
609 LONG vos_sctp_client_one2one_str_create(vos_domain_t family,CHAR *s_addrStr[],LONG s_addrcnt, SHORT s_port,
610 struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events,sctp_assoc_t *id);
614 * 创建sctp 一对一 socket,包含创建、绑定和监听
615 * @param[in ] family VOS_AF_INET 和 VOS_AF_INET6
616 * @param[in ] addrStr 地址字符串数组
617 * @param[in ] addrcnt 地址个数
618 * @param[in ] port 端口号
619 * @param[in ] maxClient 最大连接数
620 * @param[in ] initmsg sctp 相关信息
621 * @param[in ] events sctp 事件,如果传入 NULL 则默认监听 data_io
622 * @return 成功返回 文件描述符,失败则返回 其他
624 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);
628 * 创建sctp 一对多 socket,包含创建、绑定和监听
629 * @param[in ] family VOS_AF_INET 和 VOS_AF_INET6
630 * @param[in ] addrs 地址数组
631 * @param[in ] addrcnt 地址个数
632 * @param[in ] port 端口号
633 * @param[in ] maxClient 最大连接数
634 * @param[in ] initmsg sctp 相关信息
635 * @param[in ] events sctp 事件,如果传入 NULL 则默认监听 data_io
636 * @return 成功返回 文件描述符,失败则返回 其他
638 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);
641 * 创建sctp 一对多 socket,包含创建
642 * @param[in ] family VOS_AF_INET 和 VOS_AF_INET6
643 * @param[in ] s_addrs 地址数组
644 * @param[in ] s_addrcnt 地址个数
645 * @param[in ] s_port 端口号
646 * @param[in ] initmsg sctp 相关信息
647 * @param[in ] events sctp 事件,如果传入 NULL 则默认监听 data_io
648 * @return 成功返回 文件描述符,失败则返回 其他
650 LONG vos_sctp_client_one2many_create(vos_domain_t family,vos_sockaddr_t *s_addrs,LONG s_addrcnt, SHORT s_port,
651 struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events);
654 * 创建sctp 一对多 socket,包含创建、绑定和监听
655 * @param[in ] family VOS_AF_INET 和 VOS_AF_INET6
656 * @param[in ] addrStr 地址字符串数组
657 * @param[in ] addrcnt 地址个数
658 * @param[in ] port 端口号
659 * @param[in ] maxClient 最大连接数
660 * @param[in ] initmsg sctp 相关信息
661 * @param[in ] events sctp 事件,如果传入 NULL 则默认监听 data_io
662 * @return 成功返回 文件描述符,失败则返回 其他
664 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);
667 * 通过字符串地址创建sctp 一对多 socket,包含创建
668 * @param[in ] family VOS_AF_INET 和 VOS_AF_INET6
669 * @param[in ] s_addrStr 地址数组
670 * @param[in ] s_addrcnt 地址个数
671 * @param[in ] s_port 端口号
672 * @param[in ] initmsg sctp 相关信息
673 * @param[in ] events sctp 事件,如果传入 NULL 则默认监听 data_io
674 * @return 成功返回 文件描述符,失败则返回 其他
676 LONG vos_sctp_client_one2many_str_create(vos_domain_t family,CHAR *s_addrStr[],LONG s_addrcnt, SHORT s_port,
677 struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events);
680 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);
682 LONG vos_tcp_client_socket_create_bind(vos_domain_t family,const CHAR *addrStr,SHORT port,vos_sockaddr_t *my_addr);
684 LONG vos_sctp_client_one2one_create_bind(vos_domain_t family,vos_sockaddr_t *s_addrs,LONG s_addrcnt, SHORT s_port,
685 struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events,sctp_assoc_t *id,
686 vos_sockaddr_t *my_addrs,LONG my_addrcnt);
688 LONG vos_sctp_client_one2many_create_bind(vos_domain_t family,vos_sockaddr_t *s_addrs,LONG s_addrcnt, SHORT s_port,
689 struct sctp_initmsg *initmsg,struct sctp_event_subscribe *events,
690 vos_sockaddr_t *my_addrs,LONG my_addrcnt);
695 #endif /* end of __cplusplus */
697 #endif /* end of __VOS_SOCKET_H__ */