SIGBUS 在服务器崩溃后尝试在套接字上调用 recv 时(Android 6.0.1)



我目前正在进行一些应用程序稳定性测试,并且在调用以下方法时遇到了问题;

vector<char> buffer( 256 ); 
received = recv( fd, buffer.data(), buffer.size(), MSG_NOSIGNAL );

在这种情况下,fd是TCP套接字。当调用上述代码并且同时套接字的服务器端以一种或另一种方式关闭时,我得到以下信号;

SIGBUS

(信号SIGBUS:非法对齐)

它似乎只发生在Android 6.0.1上,我似乎无法使用"忽略"SIGBUS。

signal(SIGBUS, SIG_IGN)

有没有人遇到过这个问题,解决这个问题的最佳方法是什么?

Oke,我已经发现了这个问题。这与recv的召唤无关.当 Android 6.0.1 上抛出std::exception时,就会发出信号。即使它责怪 recv 电话。这似乎是由我正在使用的 c++_shared STL 版本引起的。解决方案是切换到gnustl_staticgnustl_shared.

最新更新