linux系统下SCTP消息收发函数

2017-12-18  本文已影响33人  EVANMORE

这里介绍的两个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);

描述

  1. sockfd是指向socket的文件描述符;
  2. msg和msgsz*分别是指向要发送的消息buffer以及消息的大小;
  3. totolen分别代表消息发送的对端,以及这个消息地址结构体的大小;
  4. ppid保存消息payload的协议栈标识,这个标识会传递给数据块;
  5. flags也会被传递给数据块来标识任何SCTP属性;
  6. stream代表使用哪个流来发送消息,由函数调用者来指定;
  7. lifetime指定消息的生命周期,单位是毫秒,由函数调用方指定,如果设置为0代表无限期;
  8. 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的一些高级特性。

  1. sd是指向socket的文件描述符,是一个输入参数;
  2. msg用来保存收到的消息;
  3. len标识要接受的消息大小,是一个输入参数;
  4. 如过from不是NULL,那么from需要填写数据发送方的地址,是一个输出参数;
  5. fromlen填写地址的大小,是一个输出参数;
  6. sinfo指向一个sctp_sndrcvinfo结构体,收到消息的时候会填写这个结构体,是一个输出参数;
  7. msg_flags指向一个整型,可以填写诸如MSG_NOTIFICATION等标志,是一个输出参数;

返回值

如果接收成功,返回收到的字节数,如果发生错误,返回-1

上一篇下一篇

猜你喜欢

热点阅读