gpt4 book ai didi

c++ - 来自 boost::asio::async_write 的 WriteHandler 在连接断开时无法正常工作(防火墙/手动断开网络连接)

转载 作者:行者123 更新时间:2023-11-30 04:13:55 26 4
gpt4 key购买 nike

我一直在尝试使用 boost::asio 编写客户端-服务器应用程序,总体而言应用程序运行良好,但我偶然发现了一个关于“WriteHandler”(async_write 函数)提供的数据的问题,当连接(客户端 <> 服务器之间)被防火墙或手动禁用网络卡丢弃。

这是代码片段:

void write(const CommunicatorMessage & msg, std::function<void(bool)> writeCallback)
{
io_service.dispatch(
[this, msg, writeCallback]()
{
boost::asio::async_write(socket, boost::asio::buffer(msg.data(), msg.length()), [this, msg, writeCallback](boost::system::error_code ec, std::size_t length)
{
writeCallback(ec != 0);
if (!ec)
{
LOG_DEBUG("Number of bytes written into the buffer: " << length << " Error code: " << ec);
LOG_DEBUG("Successfully send msg: " << msg);
}
else
{
LOG_ERROR("Failed sending msg: " << msg);
throw std::exception(ec.message().c_str());
}
});
});
}

来自 Writethandler 的数据是有效的(错误代码为 0,bytes_transferred 是正确的),即使数据没有到达服务器。我已经使用 Wireshark 跟踪了整个流程(这里是带有屏幕截图的链接 Link)

最佳答案

async_write 向您发送成功时,这意味着它已成功写入内核缓冲区。但是,它不能保证数据包已交付。

关于c++ - 来自 boost::asio::async_write 的 WriteHandler 在连接断开时无法正常工作(防火墙/手动断开网络连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19159829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com