X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;ds=sidebyside;f=original%2Fman7%2Fepoll.7;h=c1dab4524466b4aec31958e07c6f725ff121c04d;hb=4ea6bb24817f6f049d6bbc90ecd77a869876f9b0;hp=19032f284bba6d837deeb8dbd30170567072556f;hpb=a2fa3340173660c2c74dc0fd52f1b94a7d84ea2c;p=linuxjm%2FLDP_man-pages.git diff --git a/original/man7/epoll.7 b/original/man7/epoll.7 index 19032f28..c1dab452 100644 --- a/original/man7/epoll.7 +++ b/original/man7/epoll.7 @@ -1,7 +1,6 @@ -.\" -.\" epoll by Davide Libenzi ( efficient event notification retrieval ) .\" Copyright (C) 2003 Davide Libenzi .\" +.\" %%%LICENSE_START(GPLv2+_SW_3_PARA) .\" This program is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 2 of the License, or @@ -12,13 +11,14 @@ .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" -.\" You should have received a copy of the GNU General Public License -.\" along with this program; if not, write to the Free Software -.\" Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +.\" You should have received a copy of the GNU General Public +.\" License along with this manual; if not, see +.\" . +.\" %%%LICENSE_END .\" .\" Davide Libenzi .\" -.TH EPOLL 7 2012-04-17 "Linux" "Linux Programmer's Manual" +.TH EPOLL 7 2015-01-10 "Linux" "Linux Programmer's Manual" .SH NAME epoll \- I/O event notification facility .SH SYNOPSIS @@ -58,7 +58,7 @@ set. .BR epoll_wait (2) waits for I/O events, blocking the calling thread if no events are currently available. -.SS Level-Triggered and Edge-Triggered +.SS Level-triggered and edge-triggered The .B epoll event distribution interface is able to behave both as edge-triggered @@ -104,8 +104,8 @@ will probably hang despite the available data still present in the file input buffer; meanwhile the remote peer might be expecting a response based on the data it already sent. -The reason for this is that edge-triggered mode only -delivers events when changes occur on the monitored file descriptor. +The reason for this is that edge-triggered mode +delivers events only when changes occur on the monitored file descriptor. So, in step .B 5 the caller might end up waiting for some data that is already present inside @@ -173,6 +173,37 @@ it is the caller's responsibility to rearm the file descriptor using .BR epoll_ctl (2) with .BR EPOLL_CTL_MOD . +.SS Interaction with autosleep +If the system is in +.B autosleep +mode via +.I /sys/power/autosleep +and an event happens which wakes the device from sleep, the device +driver will keep the device awake only until that event is queued. +To keep the device awake until the event has been processed, +it is necessary to use the +.BR epoll (7) +.B EPOLLWAKEUP +flag. + +When the +.B EPOLLWAKEUP +flag is set in the +.B events +field for a +.IR "struct epoll_event" , +the system will be kept awake from the moment the event is queued, +through the +.BR epoll_wait (2) +call which returns the event until the subsequent +.BR epoll_wait (2) +call. +If the event should keep the system awake beyond that time, +then a separate +.I wake_lock +should be taken before the second +.BR epoll_wait (2) +call. .SS /proc interfaces The following interfaces can be used to limit the amount of kernel memory consumed by epoll: @@ -195,7 +226,7 @@ the default value for .I max_user_watches is 1/25 (4%) of the available low memory, divided by the registration cost in bytes. -.SS Example for Suggested Usage +.SS Example for suggested usage While the usage of .B epoll when employed as a level-triggered interface does have the same @@ -231,12 +262,12 @@ from where it stopped before. struct epoll_event ev, events[MAX_EVENTS]; int listen_sock, conn_sock, nfds, epollfd; -/* Set up listening socket, \(aqlisten_sock\(aq (socket(), - bind(), listen()) */ +/* Code to set up listening socket, \(aqlisten_sock\(aq, + (socket(), bind(), listen()) omitted */ -epollfd = epoll_create(10); +epollfd = epoll_create1(0); if (epollfd == \-1) { - perror("epoll_create"); + perror("epoll_create1"); exit(EXIT_FAILURE); } @@ -294,7 +325,7 @@ calling .BR epoll_ctl (2) with .BR EPOLL_CTL_MOD . -.SS Questions and Answers +.SS Questions and answers .TP 4 .B Q0 What is the key used to distinguish the file descriptors registered in an @@ -364,7 +395,7 @@ file descriptor itself poll/epoll/selectable? Yes. If an .B epoll -file descriptor has events waiting then it will +file descriptor has events waiting, then it will indicate as being readable. .TP .B Q4 @@ -484,7 +515,7 @@ The same is true when writing using .BR write (2). (Avoid this latter technique if you cannot guarantee that the monitored file descriptor always refers to a stream-oriented file.) -.SS Possible Pitfalls and Ways to Avoid Them +.SS Possible pitfalls and ways to avoid them .TP .B o Starvation (edge-triggered) .PP @@ -543,8 +574,17 @@ mechanisms, for example, FreeBSD has .IR kqueue , and Solaris has .IR /dev/poll . -.SH "SEE ALSO" +.SH SEE ALSO .BR epoll_create (2), .BR epoll_create1 (2), .BR epoll_ctl (2), .BR epoll_wait (2) +.SH COLOPHON +This page is part of release 3.79 of the Linux +.I man-pages +project. +A description of the project, +information about reporting bugs, +and the latest version of this page, +can be found at +\%http://www.kernel.org/doc/man\-pages/.