【问题标题】:SIGBUS when trying to call recv on socket after server crash (Android 6.0.1)服务器崩溃后尝试在套接字上调用 recv 时的 SIGBUS(Android 6.0.1)
【发布时间】:2017-10-23 16:19:27
【问题描述】:

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

    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)

还有其他人遇到过这个问题吗?解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: android sockets android-ndk signals sigbus


    【解决方案1】:

    好的,我找到了问题所在。它与对recv 的调用无关。该信号发生在 Android 6.0.1 上抛出 std::exception 时。即使它归咎于recv调用。这似乎是由我使用的 c++_shared STL 版本引起的。解决方案是切换到gnustl_staticgnustl_shared

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      相关资源
      最近更新 更多