提振.Asio,同一个插座的两个读数
Boost.Asio, two readings by the same socket
我正在学习Boost.Asio。我定义了一个类,它的角色是客户端和服务器:
- 我可以创建连接,发送请求和接收响应(客户端角色)
- 我可以接受请求并发送响应这些请求(服务器角色)。
- 我也可以创建订阅:创建连接,发送订阅请求并等待响应。如果远程端点接受请求,它将通过此连接定期向我发送数据。
我希望能够在订阅后发出请求并接收响应,但是当我得到响应时出现了一个问题:在那一刻,套接字等待同时接收订阅和响应。
有时会出现死锁,有时我在等待响应时获得订阅,…
为了阅读,我使用了以下函数:void async_receive_subscription(const socket& the_socket, read_handler_signature handler)
{
auto self( this->shared_from_this() );
boost::asio::async_read(
the_socket.get(),
boost::asio::buffer( my_buffer ),
[this, self, the_socket, my_buffer, handler]
( const boost::system::error_code& error,
std::size_t bytes_transferred )
{
the_socket.get().get_io_service().post(
std::bind(
handler,
error,
bytes_transferred,
the_socket,
my_buffer
)
);
// Read the next subscription.
async_receive_subscription(the_socket, handler);
}
);
}
void async_receive(const socket& the_socket, read_handler_signature handler)
{
auto self( this->shared_from_this() );
boost::asio::async_read(
the_socket.get(),
boost::asio::buffer( my_buffer ),
[this, self, the_socket, my_buffer, handler]
( const boost::system::error_code& error,
std::size_t bytes_transferred )
{
the_socket.get().get_io_service().post(
std::bind(
handler,
error,
bytes_transferred,
the_socket,
my_buffer
)
);
}
);
}
同一个套接字有可能产生两个响应吗?有什么同步机制可以用来避免这个问题吗?
谢谢。
async_read保证只调用一次处理程序。
在此处理程序被调用之前,不能再调用async_read。
问题:
- 你是在多线程中运行io_service吗?如果是这样,你需要通过asio::strand传递你的处理程序。
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 两个字符串在 c++ 中不相等
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 两个文件使用彼此的功能-如何解决
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 为什么我不能为一个 asio io_service使用两个计时器?
- boost::asio::async_connect 不仅创建一个 TCP 连接,还创建两个
- Boost::ASIO:使用两个进程的双向通信
- 我可以在两个不同的类实例中使用boost asio套接字引用吗
- boost-asio在两个线程c++之间进行通信
- Boost::asio::async_write混合来自两个消息的数据(bug)
- Boost asio和线程,如果我运行两个实例,我得到cpu在100%
- 当使用Boost ASIO时,有效载荷拆分为两个TCP数据包,当它适合MTU时
- 提振.Asio,同一个插座的两个读数