本机网络相关函数在android中随机阻塞

时间:2017-12-10 18:56:47

标签: 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);

程序开始运行后,每次调用这些函数几次。同一个调用可以正常工作一次并在下次无限期(至少几分钟)阻塞。设备上的互联网连接似乎没问题。

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

1 个答案:

答案 0 :(得分:1)

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

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