UNIX网络编程读书笔记:基本SCTP套接口编程


sctp_bindx( sockfd, sockaddr *addrs, addrcnt, ——成功,-——出错

sockfd是由socket函数返回的套接口描述字。

addrs是一个指向紧凑的地址清单的指针。每个套接口地址结构紧跟在前一个套接口地址结构之后,中间没有填充字节。如下图所示:

flags 说明 SCTP_BINDX_ADD_ADDR
SCTP_BINDX_REM_ADDR 把地址加入套接口中
从套接口中移除地址

sctp_bindx既可用于已绑定的套接口,也可用于未绑定的套接口。

对于未绑定的套接口,sctp_bindx调用将把给定的地址集合捆绑到其上。对于已绑定的套接口,若指定SCTP_BINDX_ADD_ADDR则把额外的地址加入到套接口描述字,若指定SCTP_BINDX_REM_ADDR则从套接口描述字的已加入地址中移除给定的地址。

如果在一个监听套接口上执行sctp_bindx调用,那么将来产生的关联将使用新的地址配置;已经存在的关联不受影响。

传递给sctp_bindx的两个标志是互斥的;如果同时指定,调用就会失败,返回错误码为EINVAL。

所有套接口地址结构的端口号必须相同,而且必须与已经绑定的端口号相匹配;否则调用就会失败,返回EINVAL错误码。

sctp_connectx( sockfd, sockaddr *addrs, ——成功,-——出错

sctp_connectx函数用于连接到一个多宿对端主机。该函数在addrs参数中指定addrcnt个全部属于同一对端的地址。addrs参数是一个紧凑的地址列表。SCTP栈使用其中一个或多个地址建立关联。列在addrs参数中的所有地址都被认为是有效的经过证实的地址。

sctp_getpaddrs( sockfd, sctp_assoc_t id, sockaddr **-——出错

sockfd参数是由socket函数返回的套接口描述字。

id参数对于一到多式套接口是它的关联标识;对于一到一套接口则被忽略。

addrs参数是一个地址指针,而地址内容是由本函数动态分配并填入的紧凑的地址清单。用完之后,调用者使用sctp_freepaddrs释放所分配的资源。

sctp_freepaddrs( sockaddr **addrs);

addrs参数是指向由sctp_getpaddrs返回的地址数组的指针。

sctp_getladdrs( sockfd, sctp_assoc_t id, sockaddr **-——出错

sockfd参数是由socket函数返回的套接口描述字。

id参数对于一到多式套接口是它的关联标识;对于一到一套接口则被忽略。

addrs参数是一个地址指针,而地址内容是由本函数动态分配并填入的紧凑的地址清单。用完之后,调用者使用sctp_freeladdrs释放所分配的资源。

sctp_freeladdrs( sockaddr **addrs);

addrs参数是指向由sctp_getladdrs返回的地址数组的指针。

sockfd, * sockaddr *-——出错

sockfd参数是由socket函数返回的套接口描述字。

msg参数指向一个msgsz字节长度的缓冲区,其中内容将发送给对端端点to。tolen参数指定存放在to中的地址长度。

ppid参数指定将随数据块传递的净荷协议标识符。

flags参数将传递给SCTP栈,用以标识任何SCTP选项。

调用者在stream参数中指定一个SCTP流号。

调用者可以在timetolive参数中以毫秒为单位指定消息的生命期,其中0表示无限生命期。

context参数用于指定可能有的用户上下文。

sockfd, * sockaddr *, socklen_t * sctp_sndrcvinfo *sinfo, *-——出错

注意,如果应用进程想要接收sctp_sndrcvinfo信息,那么必须使用SCTP_EVENTS套接口选项预定sctp_data_io_event(缺省情况下开启)。

本函数调用返回时,msg参数所指缓冲区中被填入最多msgsz字节数的数据。消息发送者的地址存放在from参数中,地址结构大小存放在fromlen参数中。msg_flags参数中存放可能有的消息标志。注意,如果实现把sctp_recvmsg映射成recvmsg函数,那么recvmsg的flags参数被设为0.

sctp_opt_info( sockfd, sctp_assoc_t assoc_id, *arg, socklen_t *——成功,-——出错

sockfd参数给出获取其上套接口选项信息的套接口描述字。

assoc_id参数给出可能存在的关联标识。

opt参数是SCTP的套接口选项。

arg给出套接口选项参数。

siz是一个socklen_t类型指针,用于存放参数的大小。

sctp_peeloff(-——出错

其语义很像带有一个额外参数的accept函数。调用者把一到多式套接口的sockfd和待抽取的关联标识id传递给函数调用。调用结束时将返回一个新的套接口描述字,它是一个与所请求关联对应的一到一式套接口描述字。

红心通知

SCTP为应用程序提供了多种可用的通知。SCTP用户可以经由这些通知追踪相关关联的状态。通知传递的是传输级的事件,包括网络状态变动、关联启动、远地运作错误以及消息不可递送。不论是一到一式接口还是一到多式接口,缺省情况下除sctp_data_io_event以外的所有事件都是被禁止的。

使用SCTP_EVENTS套接口选项可以预订8个事件。其中7个事件产生称为通知(notification)的额外数据,通知本身可经由普通的套接口描述字获取。当产生它们的事件发生时,这些通知内嵌在数据中加入到套接口描述字。在预订相应通知的前提下读取某个套接口时,用户数据和通知将在套接口缓冲区中交错出现。为了区分来自对端的数据和由事件产生的通知,用户应该使用recvmsg函数或sctp_recvmsg函数。如果返回的数据是一个事件通知,那么这两个函数返回的msg_flags参数将含有MSG_NOTIFICATION标志。这个标志告诉应用进程刚刚读入的消息不是来自对端的数据,而是来自本地SCTP栈的一个通知。

相关内容