编程接口指南

sctp_sendmsg()

ssize_t sctp_sendmsg(int s, const void *msg, size_t len, const struct sockaddr *to, socklen_t tolen, uint32_t ppid, uint32_t flags, uint16_t stream_no, uint32_t timetolive, uint32_t context);

sctp_sendmsg() 函数在发送来自 SCTP 端点的消息时启用高级 SCTP 功能。

s

此值指定发送消息的 SCTP 端点。

msg

此值包含 sctp_sendmsg() 函数所发送的消息。

len

此值为消息的长度,以字节为单位。

to

此值为消息的目标地址。

tolen

此值为目标地址的长度。

ppid

此值为应用程序指定的有效负荷协议标识符。

stream_no

此值为此消息的目标流。

timetolive

此值为消息未能成功发送到对等方的情况下消息过期之前可以等待的时间段,以毫秒为单位。

context

如果在发送消息时出现错误,则返回此值。

flags

此值在将逻辑运算 OR 以按位形式应用于以下零个或多个标志位时形成:

MSG_UNORDERED

设置此标志之后,sctp_sendmsg() 函数将无序传送消息。

MSG_ADDR_OVER

设置此标志之后,sctp_sendmsg() 函数将使用 to 参数中的地址,而不使用关联的主要目标地址。此标志仅用于一对多风格 SCTP 套接字。

MSG_ABORT

设置此标志之后,指定的关联将异常中止,同时向其对等方发送 ABORT 信号。此标志仅用于一对多风格 SCTP 套接字。

MSG_EOF

设置此标志之后,指定的关联将进入正常关机状态。此标志仅用于一对多风格 SCTP 套接字。

MSG_PR_SCTP

设置此标志之后,如果消息传输未在 timetolive 参数所指定的时间段内成功完成,则消息将过期。

sctp_sendmsg() 函数将返回其发送的字节数。sctp_sendmsg() 函数将在出现错误时返回 -1。

如果在 s 参数中传递的文件描述符无效,则 sctp_sendmsg() 函数将失败,并将 errno 的值设置为 EBADF。如果在 s 参数中传递的文件描述符没有描述套接字,则 sctp_sendmsg() 函数将失败,并将 errno 的值设置为 ENOTSOCK。如果 flags 参数包括值 MSG_OOB,则 sctp_sendmsg() 函数将失败,并将 errno 的值设置为 EOPNOTSUPP。如果一对一风格套接字的 flags 参数包括 MSG_ABORTMSG_EOF 值,则 sctp_sendmsg() 函数将失败,并将 errno 的值设置为 EOPNOTSUPP。如果没有建立关联,则 sctp_sendmsg() 函数将失败,并将 errno 的值设置为 ENOTCONN。如果套接字关闭,禁止进一步写入,则 sctp_sendmsg() 函数将失败,并将 errno 的值设置为 EPIPE。如果套接字为非阻止套接字并且传输队列已满,则 sctp_sendmsg() 函数将失败,并将 errno 的值设置为 EAGAIN

如果控制消息长度不正确,则 sctp_sendmsg() 函数将失败,并将 errno 的值设置为 EINVAL。如果指定的目标地址不属于关联,则 sctp_sendmsg() 函数将失败,并将 errno 的值设置为 EINVAL。如果 stream_no 的值不在关联所支持的外发流数之内,则 sctp_sendmsg() 函数将失败,并将 errno 的值设置为 EINVAL。如果所指定的目标地址的地址族不是 AF_INETAF_INET6,则 sctp_sendmsg() 函数将失败,并将 errno 的值设置为 EINVAL