我有一个用C编写的库,我使用的是一个Android应用程序。我发现在执行各种功能时,应用程序有时会阻塞(常见的是它们都与网络有关)。
我正在运行Android 6的一个真正的Android设备上进行测试。这个库是用NDK版本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);在程序开始运行后,每个函数都会被多次调用。同一个调用一次可以正常工作,下一次可以无限期地(至少几分钟)阻塞。设备上的互联网连接似乎很好。
有什么想法吗?我如何处理调试这样的问题呢?
发布于 2017-12-11 12:41:15
我并没有真正找到问题的原因,但我找到了解决问题的方法。代码的一部分是由其他人编写的,我不知道它到底在做什么。在重写了这部分之后,一切都开始运转良好。
除其他外,该代码还生成了一个使用fork()的新进程。我怀疑这个问题与此有关。
https://stackoverflow.com/questions/47742333
复制相似问题