android - android中 native 网络相关功能随机阻塞

标签 android c native

我有一个用 C 编写的库,我正在 Android 应用程序中使用它。我发现应用程序在执行各种功能时有时会阻塞(常见的是它们都与网络有关)。

我正在运行 Android 6 的真实 Android 设备上进行测试。 该库是使用 NDK 版本 21 编译的。

到目前为止,我已经通过 3 个函数观察到了这种行为 - 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);

程序开始运行后,这些函数会被多次调用。同一个调用可能一次工作正常,但下一次就会无限期地阻塞(至少几分钟)。设备上的互联网连接似乎很好。

有什么想法吗?我怎样才能调试这样的问题?

最佳答案

我实际上没有找到问题的原因,但我找到了解决方法。部分代码是由其他人编写的,我不确定它到底在做什么。重写这部分后,一切开始正常工作。

除此之外,代码还使用 fork() 生成一个新进程。我怀疑问题与此有关。

关于android - android中 native 网络相关功能随机阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47742333/

相关文章:

android - 重置后无法选择先前选择的 RadioButton

android - 带有谷歌分析的独立安卓库

c++ - MSBuild:VS2010 中 native C++ 项目的 Custom.After.Microsoft.Common.targets

javascript - 在 FF 上使用 native Javascript 进行样式属性操作

java - 如何为我的 Android 应用程序制作表格

c# - Xamarin Forms 显示警报消失

android - 检测多点触控功能android

c - NCurses 初始化而不清除屏幕

C 编程结构 vector 分配

c++ - strcmp() 但在 A-Z 之后是 0-9? (C/C++)