2014-01-19 32 views
2

我正在用Android ndk,使用epoll編寫網絡通信程序。 我發現「epoll_wait」喚醒不是很準確如何處理這種情況:andorid epoll_wait返回-1和errno = 4使用ndk

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

4是EINTR,這意味着你的應用程序得到了一個信號。這不是一個真正的錯誤,只需重新啓動epoll即可。

關於「等待很久」,您的應用程序是否至少保留了部分喚醒鎖?

相關問題