什么更适合Unix套接字中的每种类型的通信?

时间:2012-07-28 11:06:39

标签: sockets unix network-programming

我需要使用Unix域套接字构建服务器,看起来有几种选择来选择通信类型。 来自man 2 socket

  • SOCK_STREAM
  • SOCK_DGRAM
  • SOCK_SEQPACKET

那么,哪一个更适合他们每个人呢? (流,数据报,数据包)

2 个答案:

答案 0 :(得分:2)

这实际上取决于您要实施的服务器类型。

如果消息边界很重要,那么SOCK_DGRAM将是最佳选择。 因为recvfrom/recvmsg/select将在收到完整邮件时返回。

使用SOCK_STREAM,消息接收更棘手:一个接收呼叫可能会返回部分消息,或两条消息的一部分,或多条消息......等等。

如果消息边界不重要,那么SOCK_STREAM可能是最佳选择。

SOCK_DGRAM的{​​{1}}是不可靠的UDP。但是,在大多数系统中,AF_INET的{​​{1}}是可靠的。 例如:如果接收器队列已满,发送方将被阻塞,直到有空间。

答案 1 :(得分:0)

对于TCP - > SOCK_STREAM 对于UDP - > SOCK_DGRAM