如何处理这种情况:andorid epoll_wait返回-1和errno = 4使用ndk

时间:2014-01-19 04:53:56

标签: android android-ndk epoll

我正在用Android ndk编写网络通信程序,使用epoll。 我发现'epoll_wait'方法不太准确

while(1){
    struct epoll_event events[3];
    log_string("epoll_wait start");//here will print start time
    events_len = epoll_wait(_epoll_fd, events, 3, 20 * 1000);// wait 20 second,for test,I use pipe instead of socket,monitor a pipe EPOLLIN event
    if (events_len <= 0) {
        log_string("epoll_wait end events_len=%d,errno=%d", events_len, errno);//Normally,the events_len always is 0,and errno is 0
    }
}

上面的代码在PC上运行(如Ubuntun PC)非常正常,正如预期的那样。

如果它在Android手机上运行(使用Android服务,运行单独的线程)首先是预期的。

一段时间后,epoll_wait变得不太准确,有时得-1和errno = 4,有时等待很长时间。

所以我只知道这种现象,但不知道为什么。

你能说出原因并告诉我使用android epoll的最佳做法吗? THX

1 个答案:

答案 0 :(得分:1)

4是EINTR,这意味着你的应用得到了一个信号。这不是一个真正的错误,只需重启epoll。

关于“等待很长时间”,你的应用程序是否至少持有部分唤醒锁?