当前位置:嗨网首页>书籍在线阅读

26-顺序数据包套接字

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

61.13.5 顺序数据包套接字

顺序数据包套接字(Sequenced-packet sockets)结合了流式套接字和数据报套接字的功能。

  • 同流式套接字一样,顺序数据包套接字也是面向连接的。建立连接的方式和流式套接字一样,也是通过bind()、listen()、accept()和connect()调用。
  • 同数据报套接字一样,顺序数据包套接字也是保留消息边界的。在顺序数据包套接字上调用read()只会返回一条消息(由对端写入)。如果消息比调用者提供的缓冲区还要长,那么剩余的字节会被丢弃。
  • 与流式套接字一样,而不同于数据报套接字的是:顺序数据包套接字之间的通信是可靠的。消息会以无错误、按顺序、不重复的方式传递到对端应用程序上,且可以保证消息会到达对端(假设没有出现系统或应用程序崩溃或者网络过载的现象)。

顺序数据包套接字也是通过socket()调用来创建的,需要将参数type指定为 SOCK_SEQPACKET。

在历史上,Linux同大多数UNIX实现一样,并没有在UNIX域或是Internet域提供对顺序数据包套接字的支持。但是,从2.6.4版内核开始,Linux在UNIX域套接字上支持了SOCK_SEQPACKET。

在Internet域上,UDP和TCP协议都不支持SOCK_SEQPACKET,但SCTP协议(将在下一节介绍)是支持的。

本书中我们没有给出一个使用顺序数据包套接字的例子。但是,除了会预留消息边界外,在使用上它同流式套接字并没有什么不同。