从Unix域套接字接收不是一成不变的

时间:2016-05-22 21:45:50

标签: sockets unix boost

我正在尝试将unix domain socket类型SOCK_SEQPACKET用作IPC机制。但是,只要发送方将数据包写入套接字,就不会收到数据包。假设发送方每两秒发送一个64字节的小数据包,有时接收器会在几秒钟后(通常发送16个64字节的数据包后)同时收到这些数据包。怎么了?我在一个进程中使用boost::asio::socket::async_send()进行发送,在另一个进程中使用boost::asio::socket::async_receive()进行接收(为了清楚起见,在上面的例子中,async_receive在~32s沉默后快速返回16次)。 async_receive接受flags作为参数,我已经尝试了所有内容,从MSG_WAITALLMSG_WAITFORONE,以及发件人中的MSG_EOR以及许多其他标志,但它看起来很像就像套接字中的缓冲区一样,没有像我期望的那样刷新。我怎么强迫这个?首先发生了什么?

编辑:请注意,使用async vs synchronous send()或receive()与此问题无关。关于以“分组”方式接收数据包,它们没有任何区别。

0 个答案:

没有答案