私はAndroidアプリケーションから使用しているC言語で書かれたライブラリを持っています。私は、アプリケーションがさまざまな機能を実行している間に時々ブロックされることを発見しました(一般的には、それらはすべてネットワーキングに関連しています)。私はAndroidの6 実行されている実際のAndroidデバイス上でテストしていネイティブネットワーク関連の関数は、アンドロイドでランダムにブロックしています
ライブラリーは、NDKのバージョンでコンパイルされ、私は3つの機能でこの動作を観察してきたこれまでのところ21
からgetaddrinfo
、poll
とsocket
:
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
getaddrinfo(hostname, port, &hints, &result);
////
struct pollfd wait = {
.fd = fd,
.events = event,
.revents = 0
};
status = poll(&wait, 1, 10000);
////
fd = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
これらの関数は、プログラムの実行が開始された後にそれぞれ数回呼び出されます。同じ呼び出しは、次回には一度うまく動作し、無期限に(少なくとも数分)ブロックされます。デバイス上のインターネット接続は正常であるようです。
アイデア?どのように私はそのような問題をデバッグに近づけることができますか?