如何正确关闭和清理套接字?
我在一个辅助线程中运行io_service,并且需要从主线程关闭连接:
void closeConnection()
{
ioc.post([&socket]() {
// Which ones do I have to call?
// In what order?
// What do they do?
//socket.cancel();
//socket.shutdown(asio::ip::tcp::socket::shutdown_both);
//socket.close();
//socket.release();
});
secondaryThread.join();
}
所有这些函数有什么区别?
我已经尝试过以下顺序...
socket.cancel();
socket.close();
socket.release();
看起来,连接关闭时没有出现错误,但是花费了太长时间(约5-10秒),因此我猜测我做错了什么。
read_async
的函数中,即使错误代码为“false”,我仍然发布了另一个read_async
。仍然认为有必要澄清所有这些函数的作用。 - tuket