gpt4 book ai didi

c++ - 如何检测 boost tcp 套接字何时断开连接

转载 作者:IT老高 更新时间:2023-10-28 22:36:47 26 4
gpt4 key购买 nike

假设我有一个套接字:

std::shared_ptr<tcp::socket> socket( new tcp::socket(acceptor.get_io_service()) );
acceptor.async_accept( *socket, std::bind( handleAccept, this, std::placeholders::_1, socket, std::ref(acceptor)) );

我将一个weak_ptr 存储到容器中的所述套接字中。我需要这个,因为我想让客户端请求其他客户端的列表,以便他们可以互相发送消息。

clients_.insert(socket);  // pseudocode

然后我运行一些异步操作

socket->async_receive( boost::asio::buffer(&(*header), sizeof(Header))
, 0
, std::bind(handleReceiveHeader, this, std::placeholders::_1, std::placeholders::_2, header, socket));

如何检测连接何时关闭,以便从容器中移除我的套接字?

clients_.erase(socket); // pseudocode

最佳答案

TCP 套接字断开连接通常由 eofconnection_resetasio 中发出信号。例如

  void async_receive(boost::system::error_code const& error,
size_t bytes_transferred)
{
if ((boost::asio::error::eof == error) ||
(boost::asio::error::connection_reset == error))
{
// handle the disconnect.
}
else
{
// read the data
}
}

我使用 boost::signals2 来表示断开连接,尽管您始终可以将指向函数的指针传递给您的套接字类,然后调用它。

请注意您的套接字和回调生命周期,请参阅:boost-async-functions-and-shared-ptrs

关于c++ - 如何检测 boost tcp 套接字何时断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19887537/

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