qicosmos/rest_rpc

疑似在set_network_err_callback中调度get_user_data抛出异常

Closed this issue · 1 comments

目前流程是这样:我需要在一个新client连接时分配部分资源,并且在连接断开后清理这些资源

但是在set_network_err_callback中调度get_user_data抛出异常如下:
terminate called after throwing an instance of 'nonstd::any_lite::bad_any_cast'

最小复现代码如下:
visual studio 2022 or gcc 9
rest_rpc 0.12

//==============================client=======================================
#include <iostream>
#include <rest_rpc.hpp>

int main()
{
rest_rpc::rpc_client NetClient("127.0.0.1", 19000);
NetClient.connect();
std::cout << "Hello World!\n";
NetClient.close();
}

//================================server=========================================
#include
#include <rest_rpc.hpp>

void CloseConn(std::shared_ptr<rest_rpc::rpc_service::connection> conn, std::string reason)
{
conn->set_user_data(100);
try {
auto k = conn->get_user_data<long>();
}
catch (...)
{
printf("exception!\n");
}
}

int main()
{
rest_rpc::rpc_service::rpc_server SrvObj(19000, 10000);
SrvObj.set_network_err_callback(CloseConn);
std::cout << "Hello World!\n";
SrvObj.run();
}
//================================end==========================================

程序会在conn->get_user_data();一行抛出exception,但是set_user_data(100);没有问题。
这个流程与client connect后立即disconnect无关,中间有业务也会崩

看起来是类型不匹配,设置时候是int,取值的时候按long去取,按int取值应该就可以了。