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
,