【发布时间】:2012-04-23 15:33:46
【问题描述】:
似乎至少有 3 种不同的本地/unix 套接字类型 (AF_UNIX)、SOCK_STREAM、SOCK_DGRAM 和 SOCK_SEQPACKET。
虽然我知道SOCK_STREAM 为您提供双向字节流,如 TCP 或双向管道,而另外两个为您提供消息/数据包 API,但 SOCK_DGRAM 的 unix 套接字有什么区别?和SOCK_SEQPACKET ?
由于这些只是本地的,我想不出有人会以可以重新排序数据包的方式实现SOCK_DGRAM 的充分理由。
另外,SOCK_DGRAM/SOCK_SEQPACKET 是否采用流量控制,或者在阅读速度慢的情况下可以丢弃消息吗?
【问题讨论】:
-
IIRC,SOCK_DGRAM 一次会给你一条消息,而 SOCK_SEQPACKET(对于支持它的协议)将允许你一次读取多个数据报,但总是对数据报进行原子读取,副 SOCK_STREAM您需要自己解析消息边界的地方。
-
只是注释 SOCK_SEQPACKET 用于 AX.25(业余无线电协议),例如 stackoverflow.com/questions/19040205/…