Closed shfxxer closed 1 week ago
目前流程是这样:我需要在一个新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=======================================
int main() { rest_rpc::rpc_client NetClient("127.0.0.1", 19000); NetClient.connect(); std::cout << "Hello World!\n"; NetClient.close(); }
//================================server=========================================
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取值应该就可以了。
目前流程是这样:我需要在一个新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
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无关,中间有业务也会崩