我从unix域套接字(AF_UNIX,SOCK_DGRAM)发送N个字节到另一个。但是,如果我从另一个套接字读取X字节,其中X< N,后续调用read()块,我无法得到其余的N-X字节。
这是unix域套接字的预期行为吗?是内核抛出的其余N-X个字节。是否有解决方案,例如套接字选项?
答案 0 :(得分:3)
您正在观察的行为并非特定于AF_UNIX
套接字。它特定于SOCK_DGRAM
套接字。数据报套接字的独特属性是它们是面向消息的。
与TCP套接字不同,每次在数据报套接字上调用send()
或sendto()
时,都会创建一条消息。您应该通过一次recv()
或recvfrom()
来电阅读整封邮件。无论什么未被阅读,都会被丢弃,下次拨打recv()
会给你下一条消息。
如果需要面向流的通信,则应使用SOCK_STREAM
。