src/Network/Reactor.cc
changeset 400 d64bf28c4340
parent 384 6d387796b139
equal deleted inserted replaced
399:c7295b72731a 400:d64bf28c4340
     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 {