2

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

  • SOCK_STREAM
  • SOCK_DGRAM
  • SOCK_SEQPACKET

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

4

2 回答 2

2

这真的取决于你要实现什么样的服务器。

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

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

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

SOCK_DGRAMofAF_INET是不可靠的 UDP。但是,在大多数系统中,SOCK_DGRAMofAF_UNIX是可靠的。例如:如果接收者队列已满,则发送者将被阻塞,直到有空间为止。

于 2012-07-31T07:30:19.670 回答
0

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

于 2012-07-28T11:08:38.477 回答