使用 asio+ssl,async_write不会发送数据

When using asio+ssl, the async_write doesn't send the data

本文关键字:数据 write asio+ssl async 使用      更新时间:2023-10-16

给定:

asio::ssl::stream<asio::ip::tcp::socket&> &m_socket;
async_write(self->m_socket, asio::buffer(self->m_v),
    [self, handler](asio::error_code ec, std::size_t s)
{
    handler(ec);
});

结果:在发送数据之前调用处理程序(socket.send((函数被调用(。结果2:数据实际上是在很长一段时间后发送的 - 在我可再现的情况下约1分钟。因此,事件的顺序如下:1. async_write被称为;2.称为处理程序;3.发送数据。

我相信正确的顺序必须是:1. async_write称为;2.发送数据。3.处理程序被称为;

它并不总是发生,但非常可重复。我在整个Internet上搜索了类似的情况 - 什么也没发现。

我需要建议:该怎么办。它是ASIO中的一个错误还是我的程序中的一些棘手的错误以及在哪里进行修复。

我可以轻松地重现该案例,可以提供日志文件等。

如果您看到的时间戳大于2。在MMA中,这并不意味着它在2之后发送。(取决于协议中的位置,您会看到时间戳(。这可能意味着MMA稍后看到它。此外,纳格尔的算法之类的东西可能会发挥作用。

尝试设置tcp nodelay,例如

socket.open(tcp::v4());
socket.set_option(tcp::no_delay(true));
socket.async_connect(endpoint, handler);