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

Cannot get the available bytes from the unix domain socket

我正在从 unix 域套接字 (AF_UNIX, SOCK_DGRAM) 向另一个套接字发送 N 个字节。但是,如果我从另一个套接字读取 X 个字节,其中 X < N,则对 read() 的后续调用会阻塞,我无法获取剩余的 N-X 个字节。

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

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

与 TCP 套接字不同,每次在数据报套接字上调用 send()sendto() 时,都会创建一个 消息 。您应该通过单个 recv()recvfrom() 调用来阅读整条消息。未读的内容将被丢弃,下一次调用 recv() 将为您发送下一条消息。

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