UNP函数笔记七: 基本SCTP套接字编程

来源:互联网 发布:c语言atm机系统 编辑:程序博客网 时间:2024/05/11 09:05

第九章  基本SCTP套接字编程:

#include <netinet/sctp.h>int sctp_bindx(int sockfd, const struct sockaddr * addrs,                int addrcnt, int flags);    flags:        SCTP_BINDX_ADD_ADDR, SCTP_BINDX_REM_ADDR    success return 0, error return -1#include <netinet/sctp.h>int sctp_connectx(int sockfd, const struct sockaddr * addrs, int addrcnt);    success return 0, error return -1#include <netinet/sctp.h>int sctp_getpaddrs(int sockfd, sctp_assoc_t id, struct sockaddr ** addrs);    success return peer-addr-count, error return -1#include <netinet/sctp.h>void sctp_freepaddrs(struct sockaddr * addrs);#include <netinet/sctp.h>int sctp_getladdrs(int sockfd, sctp_assoc_t id, struct sockaddr ** addrs);    success return local-addr-count, error return -1#include <netinet/sctp.h>void sctp_freeladdrs(struct sockaddr * addrs);#include <netinet/sctp.h>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);    timetolive, ms    success return write-bytes, error return -1#include <netinet/sctp.h>ssize_t sctp_recvmsg(int sockfd, void * msg, size_t msgsz,                      struct sockaddr * from, socklen_t * fromlen,                      struct sctp_sndrcvinfo * sinfo, int * msg_flags);    success return read-bytes, error return -1#include <netinet/sctp.h>int sctp_opt_info(int sockfd, sctp_assoc_t assoc_id,                   int opt, void * arg, socklen_t * siz);    success return 0, error return -1#include <netinet/sctp.h>int sctp_peeloff(int sockfd, sctp_assoc_t id);    success return new-sockfd, error return -1struct sctp_tlv {    u_int16_t sn_type;    u_int16_t sn_flags;    u_int32_t sn_length;};sn_type:                         sctp-socket-option:    SCTP_ASSOC_CHANGE                sctp_association_event    SCTP_PEER_ADDR_CHANGE            sctp_address_event    SCTP_REMOTE_ERROR                sctp_peer_error_event    SCTP_SEND_FAILED                 sctp_send_failure_event    SCTP_SHUTDOWN_EVENT              sctp_shutdown_event    SCTP_ADAPTION_INDICATION         sctp_adaption_layer_event    SCTP_PARTIAL_DELIVERY_EVENT      sctp_partial_delivery_event                                     sctp_data_io_event (default open)/* notification event */union sctp_notification {    struct sctp_tlv sn_header;    struct sctp_assoc_change sn_assoc_change;    struct sctp_paddr_change sn_paddr_change;    struct sctp_remote_error sn_remote_error;    struct sctp_send_failed sn_send_failed;    struct sctp_shutdown_event sn_shutdown_event;    struct sctp_adaption_event sn_adaption_event;    struct sctp_pdapi_event sn_pdapi_event;};SCTP_ASSOC_CHANGE:struct sctp_assoc_change {    u_int16_t sac_type;    u_int16_t sac_flags;    u_int32_t sac_length;    u_int16_t sac_state;    u_int16_t sac_error;    u_int16_t sac_outbound_streams;    u_int16_t sac_inbound_streams;    sctp_assoc_t sac_assoc_id;    uint8_t   sac_info[];};sac_state:    SCTP_COMM_UP         /* have new connect */    SCTP_COMM_LOST       /* close a connect */    SCTP_RESTART         /* remote restart */     SCTP_SHUTDOWN_COMP   /* shutdown complete */    SCTP_CANT_STR_ASSOC  /* can not get ack */SCTP_PEER_ADDR_CHANGE:struct sctp_paddr_change {    u_int16_t spc_type;    u_int16_t spc_flags;    u_int32_t spc_length;    struct sockaddr_storage spc_aaddr;    u_int32_t spc_state;    u_int32_t spc_error;    sctp_assoc_t spc_assoc_id;};spc_state:    SCTP_ADDR_ADDED        /* address adds to connection */    SCTP_ADDR_AVAILABLE    /* address becomes reachable */    SCTP_ADDR_CONFIRMED    /* address is valid */    SCTP_ADDR_MADE_PRIM    /* address becomes the primary address */    SCTP_ADDR_REMOVED      /* address removed from connection */    SCTP_ADDR_UNREACHABLE  /* address becomes unreachable */SCTP_REMOTE_ERROR:struct sctp_remote_error {    u_int16_t sre_type;    u_int16_t sre_flags;    u_int32_t sre_length;    u_int16_t sre_error;    sctp_assoc_t sre_assoc_id;    u_int8_t  sre_data[];};SCTP_SEND_FAILED:struct sctp_send_failed {    u_int16_t ssf_type;    u_int16_t ssf_flags;    u_int32_t ssf_length;    u_int32_t ssf_error;    struct sctp_sndrcvinfo ssf_info;    sctp_assoc_t ssf_assoc_id;    u_int8_t  ssf_data[];};ssf_flags:    SCTP_DATA_UNSENT    SCTP_DATA_SENTSCTP_SHUTDOWN_EVENT:struct sctp_shutdown_event {    u_int16_t sse_type;    u_int16_t sse_flags;    u_int32_t sse_length;    sctp_assoc_t sse_assoc_id;};SCTP_ADAPTION_INDICATION:struct sctp_adaption_event {    u_int16_t sai_type;    u_int16_t sai_flags;    u_int32_t sai_length;    u_int32_t sai_adaption_ind;    sctp_assoc_t sai_assoc_id;};SCTP_PARTIAL_DELIVERY_EVENT:struct sctp_pdapi_event {    u_int16_t pdapi_type;    u_int16_t pdapi_flags;    u_int32_t pdapi_length;    u_int32_t pdapi_indication;    sctp_assoc_t pdapi_assoc_id;};pdapi_indication:    SCTP_PARTIAL_DELIVERY_ABORTED


原创粉丝点击