我有一个用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);
程序开始运行后,每次调用这些函数几次。同一个调用可以正常工作一次并在下次无限期(至少几分钟)阻塞。设备上的互联网连接似乎没问题。
有什么想法吗?我怎样才能调试这样的问题?
答案 0 :(得分:1)
我实际上并没有找到问题的原因,但我找到了解决方法。部分代码是由其他人编写的,我不确定它到底在做什么。重写此部分后,一切都开始正常工作。
除其他外,代码正在使用fork()
生成一个新进程。我怀疑问题与此有关。