1 /* Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public License as
6 published by the Free Software Foundation; either version 2 of the
7 License, or (at your option) any later version.
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
14 You should have received a copy of the GNU Library General Public
15 License along with the GNU C Library; see the file COPYING.LIB. If not,
16 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 Boston, MA 02111-1307, USA. */
20 #include <sys/types.h>
25 /* Poll the file descriptors described by the NFDS structures starting at
26 FDS. If TIMEOUT is nonzero and not -1, allow TIMEOUT milliseconds for
27 an event to occur; if TIMEOUT is -1, block until an event occurs.
28 Returns the number of file descriptors with events, zero if timed out,
32 poll (fds
, nfds
, timeout
)
34 unsigned long int nfds
;
38 fd_set rset
, wset
, xset
;
47 for (f
= fds
; f
< &fds
[nfds
]; ++f
)
50 if (f
->events
& POLLIN
)
51 FD_SET (f
->fd
, &rset
);
52 if (f
->events
& POLLOUT
)
53 FD_SET (f
->fd
, &wset
);
54 if (f
->events
& POLLPRI
)
55 FD_SET (f
->fd
, &xset
);
56 if (f
->fd
> maxfd
&& (f
->events
& (POLLIN
|POLLOUT
|POLLPRI
)))
60 tv
.tv_sec
= timeout
/ 1000;
61 tv
.tv_usec
= (timeout
% 1000) * 1000;
63 ready
= __select (maxfd
+ 1, &rset
, &wset
, &xset
,
64 timeout
== -1 ? NULL
: &tv
);
66 for (f
= fds
; f
< &fds
[nfds
]; ++f
)
71 if (FD_ISSET (f
->fd
, &rset
))
73 if (FD_ISSET (f
->fd
, &wset
))
74 f
->revents
|= POLLOUT
;
75 if (FD_ISSET (f
->fd
, &xset
))
76 f
->revents
|= POLLPRI
;