aCu*_*ria 14 c++ sockets boost tcp boost-asio
假设我有一个套接字:
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)) );
Run Code Online (Sandbox Code Playgroud)
我将weak_ptr存储在容器中的所述套接字中.我需要这个,因为我想允许客户端请求其他客户端列表,以便他们可以相互发送消息.
clients_.insert(socket); // pseudocode
Run Code Online (Sandbox Code Playgroud)
然后我运行一些异步操作
socket->async_receive( boost::asio::buffer(&(*header), sizeof(Header))
, 0
, std::bind(handleReceiveHeader, this, std::placeholders::_1, std::placeholders::_2, header, socket));
Run Code Online (Sandbox Code Playgroud)
如何检测连接何时关闭,以便从容器中取出插座?
clients_.erase(socket); // pseudocode
Run Code Online (Sandbox Code Playgroud)
ken*_*nba 19
TCP套接字断开通常asio
由a eof
或a 发出信号connection_reset
.例如
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
}
}
Run Code Online (Sandbox Code Playgroud)
我boost::signals2
用来发信号断开连接,尽管你总是可以将指向函数的指针传递给你的套接字类,然后调用它.
请注意套接字和回调生存期,请参阅:boost-async-functions-and-shared-ptrs
归档时间: |
|
查看次数: |
17354 次 |
最近记录: |