我正在尝试将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_WAITALL
到MSG_WAITFORONE
,以及发件人中的MSG_EOR
以及许多其他标志,但它看起来很像就像套接字中的缓冲区一样,没有像我期望的那样刷新。我怎么强迫这个?首先发生了什么?
编辑:请注意,使用async vs synchronous send()或receive()与此问题无关。关于以“分组”方式接收数据包,它们没有任何区别。