1

我正在使用 boost::asio 来实现网络编程并遇到时间问题。目前,这个问题主要出在客户身上。

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

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

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

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

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

有没有办法同步这个,以便在执行任何发布的调用之前创建套接字。

4

2 回答 2

1

在创建套接字并使用 建立连接boost::asio时,您可以定义一个在这些操作完成或失败时调用的方法。因此,您应该在成功回调中触发您的“已发布呼叫”。

相关的方法和类是:

boost::asio::ip::tcp::resolver::async_resolve(...)
boost::asio::ip::tcp::socket::async_connect(...)
于 2012-11-27T07:01:57.817 回答
0

我认为下面的链接

会给你一些帮助

http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service.html

于 2012-11-27T06:55:28.487 回答