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)

Кто-нибудь еще сталкивался с этой проблемой, и что было бы лучшим подходом для решения этой проблемы?

1 ответ

Решение

Ок, я выяснил проблему. Это не имеет ничего общего с призывом к recv, Сигнал возникает, когда и std::exception кидает на Android 6.0.1. Несмотря на то, что он винит вызов recv. Кажется, это вызвано тем, что я использую совместно используемую STL-версию C++_. Решением было переключиться на gnustl_static или же gnustl_shared,

Другие вопросы по тегам