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

标签 sockets unix network-programming

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

  • SOCK_STREAM
  • SOCK_DGRAM
  • SOCK_SEQPACKET

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

最佳答案

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

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

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

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

AF_INET

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

关于sockets - 什么更适合 Unix 套接字中的每种类型的通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11700456/

相关文章:

c - ACK真的在最简单的UDP套接字编程中迷失了吗?

c - 如何不使用 waitpid 阻止父级

c - 如何通过c中的套接字发送多个文件?

Java UDP - 数据包发送问题

node.js - 如何配置socket io和socket io客户端

java - 在构造函数中用套接字填充ArrayList?

java - 发送文件的客户端/服务器卡在某处

linux - linux中 `echo ${#str}`是什么意思

linux - 如何使用 CUPS(lp 命令)打印多页 tiff 文件?

java - 为什么不读取第二行?