throw UnexpectedErrorException(err, safeStrError(err));
}
} else if (ret > 0) {
+ // First, write responses
+ int readyForReadNum = 0;
for (int i = 0; i < m_maxDesc + 1 && ret; ++i) {
- if (FD_ISSET(i, &readSet)) {
- readyForRead(i);
- --ret;
- }
if (FD_ISSET(i, &writeSet)) {
readyForWrite(i);
--ret;
}
+ if (FD_ISSET(i, &readSet)) {
+ --ret;
+ ++readyForReadNum;
+ }
+ }
+ // Then accept new connections and requests
+ for (int i = 0; i < m_maxDesc + 1 && readyForReadNum; ++i) {
+ if (FD_ISSET(i, &readSet)) {
+ readyForRead(i);
+ --readyForReadNum;
+ }
}
LOGD("checking sockets <= %i for data to write", m_maxDesc);