- select(socket->m_fd + 1, &read_set, NULL, NULL, &tv);
+ /* If select() says that the socket is readable, then we have
+ * no way to distinguish if that means 'data available' (to
+ * recv) or 'incoming connection' (to accept). The same goes
+ * for writability: we cannot distinguish between 'you can
+ * send data' and 'connection request completed'. So we will
+ * assume the following: if the flag was set upon entry,
+ * that means that the event was possible.
+ */
+ if (FD_ISSET(socket->m_fd, &readfds))
+ {
+ mask |= (flags & GSOCK_CONNECTION_FLAG);
+ mask |= (flags & GSOCK_INPUT_FLAG);
+ }
+ if (FD_ISSET(socket->m_fd, &writefds))
+ {
+ mask |= (flags & GSOCK_CONNECTION_FLAG);
+ mask |= (flags & GSOCK_OUTPUT_FLAG);
+ }
+ if (FD_ISSET(socket->m_fd, &exceptfds))
+ mask |= (flags & GSOCK_LOST_FLAG);