2017-12-10 7 views
0

私はAndroidアプリケーションから使用しているC言語で書かれたライブラリを持っています。私は、アプリケーションがさまざまな機能を実行している間に時々ブロックされることを発見しました(一般的には、それらはすべてネットワーキングに関連しています)。私はAndroidの6 実行されている実際のAndroidデバイス上でテストしていネイティブネットワーク関連の関数は、アンドロイドでランダムにブロックしています

ライブラリーは、NDKのバージョンでコンパイルされ、私は3つの機能でこの動作を観察してきたこれまでのところ21

からgetaddrinfopollsocket

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); 

これらの関数は、プログラムの実行が開始された後にそれぞれ数回呼び出されます。同じ呼び出しは、次回には一度うまく動作し、無期限に(少なくとも数分)ブロックされます。デバイス上のインターネット接続は正常であるようです。

アイデア?どのように私はそのような問題をデバッグに近づけることができますか?

答えて

1

問題の理由は実際には見つかりませんでしたが、修正方法が見つかりました。コードの一部が他の誰かによって書かれていて、正確に何をしているのか分からなかった。この部分を書き直した後、すべてが正常に動作するようになりました。

特に、このコードでは、新しいプロセスがfork()で生成されていました。私はその問題がそれに関連していると思う。

関連する問題