Boost的官方網站插座:: close()函數,見descriptionBoost.Asio的插座::關閉不扔的boost ::支持ASIO ::錯誤:: operation_aborted錯誤
「此功能會導致所有未完成的異步連接,發送和接收操作立即完成,並且取消操作的處理程序將傳遞boost :: asio :: error :: operation_aborted錯誤。「
但奇怪的是,當我打電話chat_session :: close()方法,插座:: close()方法傳遞ERROR_CONNECTION_ABORTED(1236)錯誤而不是升壓:: ASIO ::錯誤:: operation_aborted(995)。
爲什麼會發生這種情況? 這是我的chat_session類。
class chat_session
: public boost::enable_shared_from_this<chat_session>
{
public:
chat_session(boost::asio::io_service& io, chat_server* room)
: m_sock(io), m_room(room)
{
}
~chat_session()
{
}
void start()
{
m_room.join(shared_from_this());
m_sock.async_read_some(
boost::asio::buffer(m_recv_data),
boost::bind(&chat_session::handle_read, shared_from_this(),
boost::asio::placeholders::error));
}
void close()
{
// closing socket. chat_session::handle_read will receive
// boost::asio::error::operation_aborted error.
m_sock.close();
}
boost::asio::ip::tcp::socket& socket()
{
return m_sock;
}
private:
void handle_read(const boost::system::error_code& error)
{
if (!error)
{
printf("RECV -> %s.\n", m_recv_data);
m_sock.async_read_some(
boost::asio::buffer(m_recv_data),
boost::bind(&chat_session::handle_read, shared_from_this(),
boost::asio::placeholders::error));
}
else
{
// when i call chat_session::close(),
// ERROR_CONNECTION_ABORTED (1236) error occurred
// instead of boost::asio::error::operation_aborted error over here
...
m_room.leave(shared_from_this());
}
}
boost::asio::ip::tcp::socket m_sock;
chat_room& m_room;
char m_recv_data[50];
};
您是否關閉發送套接字或接收套接字?哪個套接字接收到connection_aborted代碼?請分享一個SSCCE – sehe