Sockets 什么更适合Unix套接字中的每种通信类型?
我需要使用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,消息接收更加棘手:一个接收呼叫可能返回部分消息
man 2插座
:
- 短袜流
- 短袜
- 短袜包装
对于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就像两者之间的交叉,面向连接,但保留数据包边界。