美文网首页
linux系统下SCTP消息收发函数

linux系统下SCTP消息收发函数

作者: EVANMORE | 来源:发表于2017-12-18 20:34 被阅读33次

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

    相关文章

      网友评论

          本文标题:linux系统下SCTP消息收发函数

          本文链接:https://www.haomeiwen.com/subject/xsagixtx.html