似乎至少有 3 种不同的本地/unix 套接字类型(AF_UNIX
) , SOCK_STREAM
, SOCK_DGRAM
and SOCK_SEQPACKET
.
虽然我知道一个SOCK_STREAM
为您提供双向字节流,如 TCP 或双向管道,另外两个为您提供消息/数据包 API,unix 套接字之间有什么区别SOCK_DGRAM
and SOCK_SEQPACKET
?
由于这些只是本地的,我想不出有人会实施的好理由SOCK_DGRAM
以某种方式它可以重新排序数据包。
另外,是否SOCK_DGRAM
/SOCK_SEQPACKET
采用流量控制,或者在读取速度慢的情况下可以丢弃消息吗?
这是一篇关于预期用例的好文章SOCK_SEQPACKET
,事实上它在 IP 协议族中并不真正可用,以及如何使用现有的 TCP 语义获得相同的东西:
http://urchin.earth.li/~twic/Sequenced_Packets_Over_Ordinary_TCP.html http://urchin.earth.li/~twic/Sequenced_Packets_Over_Ordinary_TCP.html
注意SOCK_SEQPACKET
在行为上更接近SOCK_STREAM
比SOCK_DGRAM
.
引用自参考网站:
SOCK_SEQPACKET套接字类型与SOCK_STREAM类型类似,也是面向连接的。这些之间的唯一区别
类型是记录边界是使用维护的
SOCK_SEQPACKET 类型。可以使用一个或多个输出发送一条记录
操作并使用一个或多个输入操作接收,但是
单个操作绝不会传输多个记录的部分内容。记录
接收者可以通过 MSG_EOR 标志看到边界
接收到由recvmsg()函数返回的消息标志。这是
协议特定是否施加最大记录大小。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)