【问题标题】:Cannot get the available bytes from the unix domain socket无法从 unix 域套接字获取可用字节
【发布时间】:2016-07-12 02:37:33
【问题描述】:

我正在从一个 unix 域套接字(AF_UNIX、SOCK_DGRAM)向另一个套接字发送 N 个字节。但是,如果我从另一个套接字读取 X 个字节,其中 X

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

【问题讨论】:

  • 这些套接字是什么 - UDP 或 TCP?
  • 我使用的socket是(AF_UNIX, SOCK_DGRAM)

标签: linux sockets networking unix-socket


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-09-30
    • 2010-12-06
    • 2019-02-23
    • 2017-02-06
    • 2015-07-20
    • 2010-11-02
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多