SCTP客户/服务器程序设计
-
与 TCP 回射程序的对比
TCP:字节流,无消息边界
SCTP:消息有边界,一次 sctp_recvmsg 收一条完整消息
SCTP 支持多流:可让不同"会话"走不同流,某流阻塞不影响其他 -
SCTP 服务器模式
迭代(iterative):一次处理一个客户,类似简单 UDP 服务器
并发(concurrent):fork/线程,类似 TCP 并发服务器
注意:SCTP 是关联(association)不是"连接",一个客户可对应多个地址 -
sctp_sendmsg 参数
sockfd, data, len, to, tolen,
ppid, flags, stream_no, timetolive, context -
sctp_recvmsg 返回值
除数据外,还得到:
- 对端地址(from)
- sctp_sndrcvinfo:sinfo_stream(流号)、sinfo_ppid、sinfo_flags 等
- msg_flags:MSG_EOR、MSG_NOTIFICATION 等
-
SCTP 通知
设置 SCTP_EVENTS 后可收到关联建立/关闭、对端地址变更等通知
通知通过 recvmsg 的 MSG_NOTIFICATION 标志区分 -
一-to-多式(one-to-many)vs 一对一式(one-to-one)
one-to-many:一个 socket 可有关联到多个对端,类似 UDP
one-to-one:每个关联一个 socket,类似 TCP,用 sctp_peeloff 从 one-to-many 中"剥出"
浙公网安备 33010602011771号