【发布时间】:2013-06-13 22:50:14
【问题描述】:
我正在使用本地 Unix 套接字在两个不同的进程之间进行通信。问题是,bth 端的某些部分代码需要不同的时间来运行,我需要在两个进程之间同步 recv 和 send。有没有办法强制send和recv在相反的进程上等待下一个对应行?
【问题讨论】:
我正在使用本地 Unix 套接字在两个不同的进程之间进行通信。问题是,bth 端的某些部分代码需要不同的时间来运行,我需要在两个进程之间同步 recv 和 send。有没有办法强制send和recv在相反的进程上等待下一个对应行?
【问题讨论】:
您必须实现一个协议。毕竟,您不能确定套接字是否同步。例如,您可以发送一个 100 字节的包,然后接收两个或更多的包。
【讨论】:
默认情况下,recv() 将阻塞(等待)直到有数据要读取,而send() 将阻塞直到缓冲区中有空间可以写入。对于大多数应用程序来说,这已经足够同步了(如果你合理地设计了你的协议)。
因此,我建议您考虑一下您的沟通方式的细节,然后尝试一下。然后,如果仍有问题,请尽可能具体地提出问题。
【讨论】:
recv() 以使程序不时停止。但是,如果需要一些时间,我会收到错误 recv: Connection reset by peer。 recv 在等待时是否有某种超时值?
setsockopt(我从手册页得到这个,我自己没有尝试过)。但是socket(7) 页面说默认是没有超时。