我正在使用boost :: asio来实现网络编程并遇到计时问题。目前这个问题主要与客户有关。
协议最初由服务器向用户返回日期时间字符串开始,客户端读取它。到那个部分它工作正常。但我还想要的是能够将命令写入服务器然后处理它们。为此,我使用io_service.post()函数,如下所示。
io_service.post(boost::bind()); // bounded function calls async_write() method.
由于某种原因,写入尝试在初始客户端/服务器通信之前发生,此时尚未创建套接字。我得到错误的套接字描述符错误。
现在,io_service的run方法确实在另一个线程中调用。
当我在post方法之前放置sleep(2)命令时,它工作正常。
是否可以同步此方法,以便在执行任何已发布的调用之前创建套接字。
答案 0 :(得分:1)
创建套接字并使用boost::asio
建立连接时,可以定义在这些操作完成或失败时要调用的方法。所以,你应该触发你发布的电话"在成功的回调中。
相关方法和类是:
boost::asio::ip::tcp::resolver::async_resolve(...)
boost::asio::ip::tcp::socket::async_connect(...)
答案 1 :(得分:0)