sctp_opt_info() 函数将返回与 sock 参数中所述的套接字关联的 SCTP 级别选项。如果此套接字为一对多风格 SCTP 套接字,则 id 参数的值是某个特定关联。对于一对一风格 SCTP 套接字,将忽略 id 参数。opt 参数的值指定要获取的 SCTP 套接字选项。arg 参数的值是为调用程序而分配的特定于选项的结构缓冲区。*len 参数的值为选项长度。
opt 参数可以采用以下值:
返回用于初始化和绑定重新传输超时 (retransmission timeout, RTO) 可调参数的协议参数。这些协议参数使用以下结构:
struct sctp_rtoinfo { sctp_assoc_t srto_assoc_id; uint32_t srto_initial; uint32_t srto_max; uint32_t srto_min; };
调用程序提供此值,它指定所关注的关联。
此值为初始 RTO 值。
此值为最大 RTO 值。
此值为最小 RTO 值。
返回特定于关联的参数。这些参数使用以下结构:
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; };
调用程序提供此值,它指定所关注的关联。
此值指定关联的最大重新传输计数。
此值指定对等方具有的地址数。
此值指定对等方接收窗口的当前值。
此值指定对等方传输到的上一个已报告的接收窗口。
此值指定关联 cookie 的生命周期。可在发出 cookie 时使用此值。
所有使用时间值的参数均以毫秒为单位。
返回 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; };
此值指定 sendmsg() 调用的缺省流。
此值始终为 0。
此值包含 sendmsg() 调用的缺省标志。此标志可以采用以下值:
MSG_UNORDERED
MSG_ADDR_OVER
MSG_ABORT
MSG_EOF
MSG_PR_SCTP
此值为 sendmsg() 调用的缺省有效负荷协议标识符。
此值为 sendmsg() 调用的缺省上下文。
此值指定时间段(以毫秒为单位)。在此时间段过后,如果消息传输尚未开始,则消息将过期。值为 0 指示消息尚未过期。如果设置了 MSG_PR_SCTP 标志,当消息传输未在 sinfo_timetolive 所指定的时间段内成功完成时,消息将过期。
此值始终为 0。
此值始终为 0。
此值由调用程序填充。它指定所关注的关联。
返回所指定对等地址的参数。这些参数使用以下结构:
struct sctp_paddrparams { sctp_assoc_t spp_assoc_id; struct sockaddr_storage spp_address; uint32_t spp_hbinterval; uint16_t spp_pathmaxrxt; };
调用程序提供此值,它指定所关注的关联。
此值指定所关注的对等地址。
此值指定心跳间隔(以毫秒为单位)。
此值指定在认为地址不可访问之前针对此地址尝试的最大重新传输数。
返回有关关联的当前状态信息。这些参数使用以下结构:
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; };
调用程序提供此值,它指定所关注的关联。
此值为关联的当前状态。关联可以采用以下状态:
SCTP 端点没有任何与其关联的关联。一旦 socket() 函数调用打开一个端点或端点关闭,则端点便会处于此状态。
SCTP 端点在调用 bind() 之后绑定到一个或多个本地地址。
此端点在等待来自任何远程 SCTP 端点的关联请求。
此 SCTP 端点已发送 INIT 块并在等待 INIT-ACK 块。
此 SCTP 端点已将从其对等方的 INIT-ACK 块接收的 cookie 回显到对等方。
此 SCTP 端点可以与其对等方交换数据。
此 SCTP 端点已从其上层接收了 SHUTDOWN 元语。此端点不再从其上层接受数据。
处于 SCTP_SHUTDOWN_PENDING 状态的 SCTP 端点已向其对等方发送了 SHUTDOWN 块。仅在确认所有从此端点到其对等方的未完成数据之后,才发送 SHUTDOWN 块。当此端点的对等方发送 SHUTDOWN ACK 块时,此端点会发送 SHUTDOWN COMPLETE 块并认为关联已关闭。
SCTP 端点已从其对等方接收了 SHUTDOWN 块。此端点不再从其用户接受新数据。
处于 SCTP_SHUTDOWN_RECEIVED 状态的 SCTP 端点已向其对等方发送了 SHUTDOWN ACK 块。此端点仅在其对等方确认来自此端点的所有未完成数据之后发送 SHUTDOWN ACK 块。当此端点的对等方发送 SHUTDOWN COMPLETE 块时,将关闭关联。
此值为关联对等方的当前接收窗口。
此值为未确认的 DATA 块数。
此值为等待接收的 DATA 块数。
此值为传入的流数。
此值为外发的流数。
如果消息、SCTP 数据包头和 IP 数据包头的组合大小超出 sstat_fragmentation_point 的值,则消息会分段。此值等于包目标地址的路径最大传输单元 (Path Maximum Transmission Unit, P-MTU)。
此值包含有关主要对等地址的信息。此信息使用以下结构:
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; };
调用程序提供此值,它指定所关注的关联。
此值为主要对等地址。
此值可以采用 SCTP_ACTIVE 或 SCTP_INACTIVE 两个值中的任意一个。
此值为对等地址的拥塞窗口。
此值为对等地址的当前平滑往返时间计算结果,以毫秒为单位。
此值为对等地址的当前重新传输超时值,以毫秒为单位。
此值为对等地址的 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_INET 或 AF_INET6,则 sctp_opt_info() 函数将失败,并将 errno 的值设置为 EAFNOSUPPORT。