这里介绍的两个SCTP收发消息的函数极大的简化了基于SCTP协议的消息收发,可以更加容易的去使用一些SCTP协议的高级特性。
sctp_sendmsg()函数
sctp_recvmsg函数用于通过SCTP socket发送消息
函数定义
ssize_t sctp_sendmsg(int sockfd, const void *msg, size_t msgsz,
const struct sockaddr *to, socklen_t tolen,
uint32_t ppid, uint32_t flags,
uint16_t stream, uint32_t timetolive, uint32_t context);
描述
- sockfd是指向socket的文件描述符;
- msg和msgsz*分别是指向要发送的消息buffer以及消息的大小;
- to和tolen分别代表消息发送的对端,以及这个消息地址结构体的大小;
- ppid保存消息payload的协议栈标识,这个标识会传递给数据块;
- flags也会被传递给数据块来标识任何SCTP属性;
- stream代表使用哪个流来发送消息,由函数调用者来指定;
- lifetime指定消息的生命周期,单位是毫秒,由函数调用方指定,如果设置为0代表无限期;
- context代表用户上下文
返回值
如果接收成功,返回收到的字节数,如果发生错误,返回-1
sctp_recvmsg() 函数
sctp_recvmsg函数用于从SCTP socket接收消息
函数定义
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/sctp.h>
int sctp_recvmsg(int sd, void * msg, size_t len,
struct sockaddr * from, socklen_t * fromlen,
struct sctp_sndrcvinfo * sinfo, int * msg_flags);
描述
sctp_recvmsg是一个封装的库函数,可以用于从一个socket接收数据的同时,使用SCTP的一些高级特性。
- sd是指向socket的文件描述符,是一个输入参数;
- msg用来保存收到的消息;
- len标识要接受的消息大小,是一个输入参数;
- 如过from不是NULL,那么from需要填写数据发送方的地址,是一个输出参数;
- fromlen填写地址的大小,是一个输出参数;
- sinfo指向一个sctp_sndrcvinfo结构体,收到消息的时候会填写这个结构体,是一个输出参数;
- msg_flags指向一个整型,可以填写诸如MSG_NOTIFICATION等标志,是一个输出参数;
返回值
如果接收成功,返回收到的字节数,如果发生错误,返回-1
网友评论