equal
deleted
inserted
replaced
8 } |
8 } |
9 |
9 |
10 void NetworkReactor::poll (timeval *timeout) { |
10 void NetworkReactor::poll (timeval *timeout) { |
11 int ret; |
11 int ret; |
12 |
12 |
13 // start counting the maximum fd from -1, so that select is given nfds=0 if our list is empty |
13 // start counting the maximum fd from 0, select will be given nfds=1 if empty |
14 int fd_max = 0; |
14 int fd_max = 0; |
15 |
15 |
16 // zero our fdsets |
16 // zero our fdsets |
17 fd_set read, write; |
17 fd_set read, write; |
18 FD_ZERO(&read); |
18 FD_ZERO(&read); |
23 NetworkSocket *socket = *it; |
23 NetworkSocket *socket = *it; |
24 |
24 |
25 // ask socket what events it wants |
25 // ask socket what events it wants |
26 NetworkPollMask mask = socket->get_poll(); |
26 NetworkPollMask mask = socket->get_poll(); |
27 |
27 |
28 // set read/write |
28 // ignore if nothing |
29 if (mask) { |
29 if (mask) { |
30 // socket file descriptor... |
30 // socket file descriptor... |
31 int fd = socket->get_socket(); |
31 int fd = socket->get_socket(); |
32 |
32 |
33 // ignore invalid FDs |
33 // ignore invalid FDs |
38 if (fd > fd_max) |
38 if (fd > fd_max) |
39 fd_max = fd; |
39 fd_max = fd; |
40 |
40 |
41 // read... |
41 // read... |
42 if (mask & POLL_READ) |
42 if (mask & POLL_READ) |
43 FD_SET(socket->get_socket(), &read); |
43 FD_SET(fd, &read); |
44 |
44 |
45 // write... |
45 // write... |
46 if (mask & POLL_WRITE) |
46 if (mask & POLL_WRITE) |
47 FD_SET(socket->get_socket(), &write); |
47 FD_SET(fd, &write); |
48 } |
48 } |
49 } |
49 } |
50 |
50 |
51 // loop select() on EINTR |
51 // loop select() on EINTR |
52 do { |
52 do { |