永远不会调用Asio异步处理程序,不会调用其他处理程序

时间:2018-11-28 05:48:04

标签: c++ linux debugging boost-asio unix-socket

我有一个asio同步连接。 ioService在一个线程中(我只有一个线程。)。

更小问题:

boost::asio::async_write(m_socket, boost::asio::buffer(requestStr.data(), requestStr.size()), handler);

永远不会调用处理程序,但是服务器会得到它并回复我得到的信息。

更大的问题:

boost::asio::async_read_until(m_socket, sbuf, '\n', sendingHandler);

它也不会调用处理程序。 sbuf 立即被填充,我可以在那里阅读,但我不知道分隔符的位置。因此,我需要处理程序来获取 bytes_transferred 参数。 (我不会迭代缓冲区。)

我尝试了几件事,一次可以调用处理程序,但是我不记得小折射后问题出在什么地方。有什么帮助吗?谢谢!

当我使用同步消息传递时,一切都很好,但是那里没有超时。

编辑: 如果您知道找到分页器的任何好方法,则不需要处理程序。 因为,我将发送味精sync_write并读取异步。

1 个答案:

答案 0 :(得分:0)

它不会被调用,因为它是异步。用于写入和读取的异步方法从不会在它们被调用的地方调用处理程序:

  

无论异步操作是否立即完成   否则,将不会从此函数内调用处理程序。   处理程序的调用将以与   使用boost :: asio :: io_service :: post()。

您需要手动调用io_service方法(如runrun_once来执行操作,而这正是调用回调的时刻。