Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 什么更适合Unix套接字中的每种通信类型?_Sockets_Unix_Network Programming - Fatal编程技术网

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

Sockets 什么更适合Unix套接字中的每种通信类型?,sockets,unix,network-programming,Sockets,Unix,Network Programming,我需要使用Unix域套接字构建一个服务器,看起来有几种选择通信类型的选项。 从man 2插座: 短袜流 短袜 短袜包装 那么,有什么更适合他们每一个人呢?(流、数据报、数据包)用于TCP->SOCK\u流 对于UDP->SOCK_DGRAM来说,这实际上取决于您要实现的服务器类型 如果消息边界很重要,那么SOCK_DGRAM将是最佳选择。 因为当收到完整消息时,recvfrom/recvmsg/select将返回 使用SOCK\u STREAM,消息接收更加棘手:一个接收呼叫可能返回部分消息

我需要使用Unix域套接字构建一个服务器,看起来有几种选择通信类型的选项。 从
man 2插座

  • 短袜流
  • 短袜
  • 短袜包装
那么,有什么更适合他们每一个人呢?(流、数据报、数据包)

用于TCP->SOCK\u流
对于UDP->SOCK_DGRAM

来说,这实际上取决于您要实现的服务器类型

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

使用
SOCK\u STREAM
,消息接收更加棘手:一个接收呼叫可能返回部分消息,或两条消息的一部分,或多条消息。。。等等

如果消息边界不重要,那么
SOCK\u STREAM
可能是最佳选择

AF_INET
SOCK_DGRAM
不可靠。但是,在大多数系统中,
AF\u UNIX
SOCK\u DGRAM
是可靠的。
例如:若接收方队列已满,则发送方将被阻止,直到有空间为止

但我指的是通过Unix套接字的连接,但同样的基本思想也适用于AF_Unix套接字
man 7 unix
提供了更多信息。SOCK_流是指连接到单个对等方的有序、可靠的字节流;SOCK_DGRAM是指一种潜在的无序、不可靠、保留数据包边界的协议,它可以发送到多个目的地/从多个目的地接收数据,SOCK_DGRAM就像两者之间的交叉,面向连接,但保留数据包边界。