我需要使用Unix域套接字构建服务器,看起来有几种选择来选择通信类型。
来自man 2 socket
:
那么,哪一个更适合他们每个人呢? (流,数据报,数据包)
答案 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