编程接口指南

sctp_opt_info()

int sctp_opt_info(int sock, sctp_assoc_id_t id, int opt, void *arg, socklen_t *len);

sctp_opt_info() 函数将返回与 sock 参数中所述的套接字关联的 SCTP 级别选项。如果此套接字为一对多风格 SCTP 套接字,则 id 参数的值是某个特定关联。对于一对一风格 SCTP 套接字,将忽略 id 参数。opt 参数的值指定要获取的 SCTP 套接字选项。arg 参数的值是为调用程序而分配的特定于选项的结构缓冲区。*len 参数的值为选项长度。

opt 参数可以采用以下值:

SCTP_RTOINFO

返回用于初始化和绑定重新传输超时 (retransmission timeout, RTO) 可调参数的协议参数。这些协议参数使用以下结构:

struct sctp_rtoinfo {

       sctp_assoc_t srto_assoc_id;

       uint32_t     srto_initial;

       uint32_t     srto_max; 

       uint32_t     srto_min;

};
srto_assoc_id

调用程序提供此值,它指定所关注的关联。

srto_initial

此值为初始 RTO 值。

srto_max

此值为最大 RTO 值。

srto_min

此值为最小 RTO 值。

SCTP_ASSOCINFO

返回特定于关联的参数。这些参数使用以下结构:

struct sctp_assocparams {

     sctp_assoc_t sasoc_assoc_id;

     uint16_t     sasoc_asocmaxrxt;

     uint16_t     sasoc_number_peer_destinations;

     uint32_t     sasoc_peer_rwnd;

     uint32_t     sasoc_local_rwnd;

     uint32_t     sasoc_cookie_life;

};
sasoc_assoc_id

调用程序提供此值,它指定所关注的关联。

sasoc_assocmaxrxt

此值指定关联的最大重新传输计数。

sasoc_number_peer_destinations

此值指定对等方具有的地址数。

sasoc_peer_rwnd

此值指定对等方接收窗口的当前值。

sasoc_local_rwnd

此值指定对等方传输到的上一个已报告的接收窗口。

sasoc_cookie_life

此值指定关联 cookie 的生命周期。可在发出 cookie 时使用此值。

所有使用时间值的参数均以毫秒为单位。

SCTP_DEFAULT_SEND_PARAM

返回 sendto(3SOCKET) 函数调用在此关联中使用的缺省参数集。这些参数使用以下结构:

struct sctp_sndrcvinfo {

     uint16_t     sinfo_stream;

     uint16_t     sinfo_ssn;

     uint16_t     sinfo_flags;

     uint32_t     sinfo_ppid;

     uint32_t     sinfo_context;

     uint32_t     sinfo_timetolive;

     uint32_t     sinfo_tsn;

     uint32_t     sinfo_cumtsn;

     sctp_assoc_t sinfo_assoc_id;

};
sinfo_stream

此值指定 sendmsg() 调用的缺省流。

sinfo_ssn

此值始终为 0。

sinfo_flags

此值包含 sendmsg() 调用的缺省标志。此标志可以采用以下值:

  • MSG_UNORDERED

  • MSG_ADDR_OVER

  • MSG_ABORT

  • MSG_EOF

  • MSG_PR_SCTP

sinfo_ppid

此值为 sendmsg() 调用的缺省有效负荷协议标识符。

sinfo_context

此值为 sendmsg() 调用的缺省上下文。

sinfo_timetolive

此值指定时间段(以毫秒为单位)。在此时间段过后,如果消息传输尚未开始,则消息将过期。值为 0 指示消息尚未过期。如果设置了 MSG_PR_SCTP 标志,当消息传输未在 sinfo_timetolive 所指定的时间段内成功完成时,消息将过期。

sinfo_tsn

此值始终为 0。

sinfo_cumtsn

此值始终为 0。

sinfo_assoc_id

此值由调用程序填充。它指定所关注的关联。

SCTP_PEER_ADDR_PARAMS

返回所指定对等地址的参数。这些参数使用以下结构:

struct sctp_paddrparams {

     sctp_assoc_t            spp_assoc_id;

     struct sockaddr_storage spp_address;

     uint32_t                spp_hbinterval;

     uint16_t                spp_pathmaxrxt;

};
spp_assoc_id

调用程序提供此值,它指定所关注的关联。

spp_address

此值指定所关注的对等地址。

spp_hbinterval

此值指定心跳间隔(以毫秒为单位)。

spp_pathmaxrxt

此值指定在认为地址不可访问之前针对此地址尝试的最大重新传输数。

SCTP_STATUS

返回有关关联的当前状态信息。这些参数使用以下结构:

struct sctp_status {

     sctp_assoc_t          sstat_assoc_id;

     int32_t               sstat_state;

     uint32_t              sstat_rwnd;

     uint16_t              sstat_unackdata;

     uint16_t              sstat_penddata;

     uint16_t              sstat_instrms;

     uint16_t              sstat_outstrms;

     uint32_t              sstat_fragmentation_point;

     struct sctp_paddrinfo sstat_primary;

};
sstat_assoc_id

调用程序提供此值,它指定所关注的关联。

sstat_state

此值为关联的当前状态。关联可以采用以下状态:

SCTP_IDLE

SCTP 端点没有任何与其关联的关联。一旦 socket() 函数调用打开一个端点或端点关闭,则端点便会处于此状态。

SCTP_BOUND

SCTP 端点在调用 bind() 之后绑定到一个或多个本地地址。

SCTP_LISTEN

此端点在等待来自任何远程 SCTP 端点的关联请求。

SCTP_COOKIE_WAIT

此 SCTP 端点已发送 INIT 块并在等待 INIT-ACK 块。

SCTP_COOKIE_ECHOED

此 SCTP 端点已将从其对等方的 INIT-ACK 块接收的 cookie 回显到对等方。

SCTP_ESTABLISHED

此 SCTP 端点可以与其对等方交换数据。

SCTP_SHUTDOWN_PENDING

此 SCTP 端点已从其上层接收了 SHUTDOWN 元语。此端点不再从其上层接受数据。

SCTP_SHUTDOWN_SEND

处于 SCTP_SHUTDOWN_PENDING 状态的 SCTP 端点已向其对等方发送了 SHUTDOWN 块。仅在确认所有从此端点到其对等方的未完成数据之后,才发送 SHUTDOWN 块。当此端点的对等方发送 SHUTDOWN ACK 块时,此端点会发送 SHUTDOWN COMPLETE 块并认为关联已关闭。

SCTP_SHUTDOWN_RECEIVED

SCTP 端点已从其对等方接收了 SHUTDOWN 块。此端点不再从其用户接受新数据。

SCTP_SHUTDOWN_ACK_SEND

处于 SCTP_SHUTDOWN_RECEIVED 状态的 SCTP 端点已向其对等方发送了 SHUTDOWN ACK 块。此端点仅在其对等方确认来自此端点的所有未完成数据之后发送 SHUTDOWN ACK 块。当此端点的对等方发送 SHUTDOWN COMPLETE 块时,将关闭关联。

sstat_rwnd

此值为关联对等方的当前接收窗口。

sstat_unackdata

此值为未确认的 DATA 块数。

sstat_penddata

此值为等待接收的 DATA 块数。

sstat_instrms

此值为传入的流数。

sstat_outstrms

此值为外发的流数。

sstat_fragmentation_point

如果消息、SCTP 数据包头和 IP 数据包头的组合大小超出 sstat_fragmentation_point 的值,则消息会分段。此值等于包目标地址的路径最大传输单元 (Path Maximum Transmission Unit, P-MTU)。

sstat_primary

此值包含有关主要对等地址的信息。此信息使用以下结构:

struct sctp_paddrinfo {

     sctp_assoc_t            spinfo_assoc_id;

     struct sockaddr_storage spinfo_address;

     int32_t                 spinfo_state;

     uint32_t                spinfo_cwnd;

     uint32_t                spinfo_srtt;

     uint32_t                spinfo_rto;

     uint32_t                spinfo_mtu;

};
spinfo_assoc_id

调用程序提供此值,它指定所关注的关联。

spinfo_address

此值为主要对等地址。

spinfo_state

此值可以采用 SCTP_ACTIVESCTP_INACTIVE 两个值中的任意一个。

spinfo_cwnd

此值为对等地址的拥塞窗口。

spinfo_srtt

此值为对等地址的当前平滑往返时间计算结果,以毫秒为单位。

spinfo_rto

此值为对等地址的当前重新传输超时值,以毫秒为单位。

spinfo_mtu

此值为对等地址的 P-MTU。

如果成功,则 sctp_opt_info() 函数将返回 0。如果失败,则 sctp_opt_info() 函数将返回 -1,并将 errno 的值设置为相应的错误代码。如果 sock 参数中传递给 sctp_opt_info() 的文件描述符无效,则 sctp_opt_info() 函数将失败并返回 EBADF。如果 sock 参数中传递给 sctp_opt_info() 函数的文件描述符没有描述套接字,则 sctp_opt_info() 函数将失败并返回 ENOTSOCK。如果关联 ID 对于一对多风格 SCTP 套接字而言无效,则 sctp_opt_info() 函数将失败,并将 errno 的值设置为 EINVAL。如果输入缓冲区长度对于指定的选项而言过短,则 sctp_opt_info() 函数将失败,并将 errno 的值设置为 EINVAL。如果对等地址的地址族不是 AF_INETAF_INET6,则 sctp_opt_info() 函数将失败,并将 errno 的值设置为 EAFNOSUPPORT