68 const size_t ENTROPY_BITS_PER_BYTE = 8;
69 const size_t MS_WAIT_TIME = 32;
74 int max_fd = devices[0];
77 for(
size_t i = 0; i != devices.size(); ++i)
79 FD_SET(devices[i], &read_set);
80 max_fd = std::max(devices[i], max_fd);
83 struct ::timeval timeout;
85 timeout.tv_sec = (MS_WAIT_TIME / 1000);
86 timeout.tv_usec = (MS_WAIT_TIME % 1000) * 1000;
88 if(::select(max_fd + 1, &read_set, 0, 0, &timeout) < 0)
91 for(
size_t i = 0; i != devices.size(); ++i)
93 if(FD_ISSET(devices[i], &read_set))
95 const ssize_t got = ::read(devices[i], &io_buffer[0], io_buffer.
size());
97 accum.
add(&io_buffer[0], got, ENTROPY_BITS_PER_BYTE);