287092735495fa2ebc1b5c6049da2be87267c155
Stefan Schuermans implemented base class for...

Stefan Schuermans authored 13 years ago

1) /* Blinker
2)    Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org>
3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
4)    a blinkenarea.org project */
5) 
6) #include <set>
7) #include <sys/select.h>
8) 
9) #include "Io.h"
10) #include "Time.h"
11) 
12) namespace Blinker {
13) 
14) /**
15)  * @brief wait for I/O events
16)  * @param[in] read I/O objects to check for readability
17)  * @param[out] read I/O objects that are readable
18)  * @param[in] write I/O objects to check for writability
19)  * @param[out] write I/O objects that are writable
20)  * @param[in] timeout maximum time to wait
21)  */
22) void Io::wait(Set &read, Set &write, const Time &timeout)
23) {
24)   // get maximum file descriptor, read set and write set
25)   int max = 0;
26)   fd_set fd_rd;
27)   FD_ZERO(&fd_rd);
28)   for (Set::const_iterator it = read.begin(); it != read.end(); ++it) {
29)     if ((*it)->m_fd > max)
30)       max = (*it)->m_fd;
31)     FD_SET((*it)->m_fd, &fd_rd);
32)   }
33)   fd_set fd_wr;
34)   FD_ZERO(&fd_wr);
35)   for (Set::const_iterator it = write.begin(); it != write.end(); ++it) {
36)     if ((*it)->m_fd > max)
37)       max = (*it)->m_fd;
38)     FD_SET((*it)->m_fd, &fd_wr);
39)   }
40) 
41)   // get timeout
42)   struct timeval to;
Stefan Schuermans do not use negative timeout...

Stefan Schuermans authored 13 years ago

43)   if (timeout < Time::zero) // don't use negaitve timeout
44)     Time::zero.toTimeval(to);
45)   else
46)     timeout.toTimeval(to);