提升ASIO网络时序问题

时间:2012-11-27 06:48:57

标签: c++ networking boost boost-asio

我正在使用boost :: asio来实现网络编程并遇到计时问题。目前这个问题主要与客户有关。

协议最初由服务器向用户返回日期时间字符串开始,客户端读取它。到那个部分它工作正常。但我还想要的是能够将命令写入服务器然后处理它们。为此,我使用io_service.post()函数,如下所示。

io_service.post(boost::bind()); // bounded function calls async_write() method. 

由于某种原因,写入尝试在初始客户端/服务器通信之前发生,此时尚未创建套接字。我得到错误的套接字描述符错误。

现在,io_service的run方法确实在另一个线程中调用。

当我在post方法之前放置sleep(2)命令时,它工作正常。

是否可以同步此方法,以便在执行任何已发布的调用之前创建套接字。

2 个答案:

答案 0 :(得分:1)

创建套接字并使用boost::asio建立连接时,可以定义在这些操作完成或失败时要调用的方法。所以,你应该触发你发布的电话"在成功的回调中。

相关方法和类是:

boost::asio::ip::tcp::resolver::async_resolve(...)
boost::asio::ip::tcp::socket::async_connect(...)

答案 1 :(得分:0)