【问题标题】:Unix IPC sockets send/recv syncUnix IPC 套接字发送/接收同步
【发布时间】:2013-06-13 22:50:14
【问题描述】:

我正在使用本地 Unix 套接字在两个不同的进程之间进行通信。问题是,bth 端的某些部分代码需要不同的时间来运行,我需要在两个进程之间同步 recvsend。有没有办法强制sendrecv在相反的进程上等待下一个对应行?

【问题讨论】:

  • 您需要更清楚自己想要什么。如果您需要同时处理发送和接收,则需要使用多个线程或使用select(2)poll(2) 系统调用之一。

标签: c++ sockets unix


【解决方案1】:

您必须实现一个协议。毕竟,您不能确定套接字是否同步。例如,您可以发送一个 100 字节的包,然后接收两个或更多的包。

【讨论】:

    【解决方案2】:

    默认情况下,recv() 将阻塞(等待)直到有数据要读取,而send() 将阻塞直到缓冲区中有空间可以写入。对于大多数应用程序来说,这已经足够同步了(如果你合理地设计了你的协议)。

    因此,我建议您考虑一下您的沟通方式的细节,然后尝试一下。然后,如果仍有问题,请尽可能具体地提出问题。

    【讨论】:

    • 我的代码一直以此为基础,放置虚拟recv() 以使程序不时停止。但是,如果需要一些时间,我会收到错误 recv: Connection reset by peerrecv 在等待时是否有某种超时值?
    • 使用setsockopt(我从手册页得到这个,我自己没有尝试过)。但是socket(7) 页面说默认是没有超时。
    猜你喜欢
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 2016-07-28
    • 1970-01-01
    • 2014-07-24
    • 2014-08-31
    相关资源
    最近更新 更多