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

一到一形式:主要是为了将现有TCP移植到STCP上

1、tcp套接字选项必须转成等效的STCP选项,
2、STCP保存消息边界,因而应用层消息边界非必须。也就是TCP是连接的,STCP是消息驱动的。
3、TCP支持半关闭状态,移植到STCP的时候,必须重写,也就是在应用层数据中告诉对端,数据流关闭。从而实现这个半关闭状态。
3、send方式普通调用,也就是不会重写目的地址。

一到多形式:一个套接字从多个客户接受消息,用于标识单个关联的是一个关联标识。

1、当客户关闭其连接的时候,服务器也关闭这个关联,
2、STCP在四路握手中传送数据的唯一形式就是使用一到多形式。
3、对于一个关联中不存在的IP,任何对他的send,sendmsg,stcp_sendmsg都会导致其主动打开的尝试,即使是服务器端,
4、用户必须使用send,sendmsg,stcp_sendmsg发送数据,而不能使用read和write。除非已经转换到一个一到一套接字。
5、任何时候发送数据,都是使用关联建立时的目的地址。
6、关联事件可能被启用。

服务器可能希望捆绑其IP地址的一个子集:stcp_bindx
#inlcude "netinet/sctp.h"
int stcp_bindx(int sockfd,const struct sockaddr*addrs,int addrcnt,int flags);

(套接字描述符,紧凑的套接字地址结构,个数,添加删除标志。)
注意:所有套接字的端口号必须相同。

stcp_connectx:连接到一个多宿主机,
int stcp_connectx(int sockfd,const struct sockaddr*addrs,int addrcnt);
其中第二个参数,是默认有效的。也就是必须要由开发者保证
stcp_getpaddrs:获取对端所有地址
#include <netinet/stcp.h>
int stcp_getpaddrs(int sockfd,sctp_assoc_t id,struct sockaddr **addrs);
stcp_getpaddrs(套接字描述符,关联标识符,地址)
其中地址是本函数动态分配到,使用完毕之后要进行释放。
stcp_freepaddrs:释放stcp_getpaddrs分配的地址

void sctp_freepaddrs(struct sockaddr *addr);

sctp_getladdrs:得到本地端点使用的IP地址集合:
#include <netinet/sctp.h>
int sctp_getladdrs(int sockfd,sctp_assoc_t id,struct sockaddr ** addr);
sctp_freepaddrs:释放scpt_getladdr分配的内存
#include<netient/sctp.h>
void sctp_freeladdrs(struct sockaddr *addr);
sctp_sendmsg:使用sctp特性的简单方法
#include<netinet/sctp.h>
ssize_t sctp_sendmsg(int sockfd,const void *msg,size_t msgsz,//套接字描述符,缓冲区以及缓冲区长度
		const struct *to,socklen_t tolen,//目的地址
		uint32_t ppid,//净荷协议标识符
		uint32_t flags,uint16_t stream,//指定sctp选项,流号
		uint32_t timetolive,//指定消息的生命周期
		uint32_t context;//用户上下文
	);
sctp_recvmsg函数:
#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,//默认启动scpt_data_io_event,和消息相关的细节消息放在这个结构中
		int *msg_flags)
scpt_peeloff:
#include<netinet/sctp.h>
int sctp_peeloff(int sockfd,sctp_aossoc_t id);
返回一个套接字描述符。
shutdown 函数
类似于TCP,shutdown无关连接数,这里给出howto语义:
SHUT_RD:关闭读
SHUT_WR:关闭写
SHUT_RDWR:关闭联结
通知

sctp可以通过通知追踪到相关关联的状态:网络状态变动,消息不可递送,连接关闭等,

在预定相应通知的前提下读取某个套接字选项的时候,用户数据和通知将在套接字中交错出现,为了区分用户数据和通知数据,应该使用recvmsg或者sctp_recvmsg来读取数据。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值