无法从unix域套接字获取可用字节

时间:2016-03-24 13:24:55

标签: linux sockets networking unix-socket

我从unix域套接字(AF_UNIX,SOCK_DGRAM)发送N个字节到另一个。但是,如果我从另一个套接字读取X字节,其中X< N,后续调用read()块,我无法得到其余的N-X字节。

这是unix域套接字的预期行为吗?是内核抛出的其余N-X个字节。是否有解决方案,例如套接字选项?

1 个答案:

答案 0 :(得分:3)

您正在观察的行为并非特定于AF_UNIX套接字。它特定于SOCK_DGRAM套接字。数据报套接字的独特属性是它们是面向消息的。

与TCP套接字不同,每次在数据报套接字上调用send()sendto()时,都会创建一条消息。您应该通过一次recv()recvfrom()来电阅读整封邮件。无论什么未被阅读,都会被丢弃,下次拨打recv()会给你下一条消息。

如果需要面向流的通信,则应使用SOCK_STREAM