我有2个案例:
问题是下一个: 在第一种情况下,我应该读取没有字节并得到一些服务器响应。 在第二种情况下,我应该读取至少1个字节,然后才会得到服务器响应。 如果我尝试读取至少0个字节,如下所示:
async_read(sock, boost::asio::buffer(data),
boost::asio::transfer_at_least(0),
boost::bind(&server::read, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
在第二种情况下我永远无法获得正确的服务器重新注册。
但如果我读取至少1个字节,那么async_read操作永远不会结束。
那么,我该如何处理这种情况?
更新1: 我仍然在不使用时间限制的情况下寻找解决方案。
答案 0 :(得分:3)
您认为这是如何工作的?第一种和第二种情况的反应是否有所不同?如果确实有变化,则无法可靠地执行此操作,因为存在竞争条件,您应该修复协议。如果它没有变化,服务器应该只发送响应。
此问题的解决方案不是asio问题。
答案 1 :(得分:0)
我猜你需要使用客户端发送的数据来在案例2中做出正确的服务器响应,并且可能在案例1中做出默认响应。 因此,连接服务器后客户端应该在多长时间内发送数据没有时间限制?也许你应该在服务器接受连接后等待特殊限制时间启动计时器。如果服务器及时收到数据,那就是情况2.如果时间结束,则情况为1。