我有一个用 C 编写的库,我正在 Android 应用程序中使用它。我发现应用程序在执行各种功能时有时会阻塞(常见的是它们都与网络有关)。
我正在运行 Android 6 的真实 Android 设备上进行测试。 该库是使用 NDK 版本 21 编译的。
到目前为止,我已经通过 3 个函数观察到了这种行为 - 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);
程序开始运行后,这些函数会被多次调用。同一个调用可能一次工作正常,但下一次就会无限期地阻塞(至少几分钟)。设备上的互联网连接似乎很好。
有什么想法吗?我怎样才能调试这样的问题?
最佳答案
我实际上没有找到问题的原因,但我找到了解决方法。部分代码是由其他人编写的,我不确定它到底在做什么。重写这部分后,一切开始正常工作。
除此之外,代码还使用 fork()
生成一个新进程。我怀疑问题与此有关。
关于android - android中 native 网络相关功能随机阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47742333/