+ XBT_DEBUG("accepted=%p,&accepted=%p", accepted, &accepted);
+ accepted->meas = sock_iter->meas;
+ break;
+
+ } else {
+ /* Make sure the socket is still alive by reading the first byte */
+ int recvd;
+
+ if (sock_iter->recvd) {
+ /* Socket wasn't used since last time! Don't bother checking whether it's still alive */
+ recvd = 1;
+ } else {
+ recvd = read(sock_iter->sd, &sock_iter->recvd_val, 1);
+ }
+
+ if (recvd < 0) {
+ XBT_WARN("socket %d failed: %s", sock_iter->sd, strerror(errno));
+ /* done with this socket; remove it and break the foreach since it will change the dynar */
+ xbt_dynar_cursor_unlock(sockets);
+ gras_socket_close(sock_iter);
+ break;
+ } else if (recvd == 0) {
+ /* Connection reset (=closed) by peer. */
+ XBT_DEBUG("Connection %d reset by peer", sock_iter->sd);
+ sock_iter->valid = 0; /* don't close it. User may keep references to it */
+ } else {
+ /* Got a suited socket ! */
+ XBT_OUT();
+ sock_iter->recvd = 1;
+ XBT_DEBUG("Filled little buffer (%c %x %d)", sock_iter->recvd_val,
+ sock_iter->recvd_val, recvd);
+ _gras_lastly_selected_socket = sock_iter;
+ /* break sync dynar iteration */
+ xbt_dynar_cursor_unlock(sockets);
+ return sock_iter;
+ }
+ }
+
+ /* if we're here, the socket we found wasn't really ready to be served */
+ if (ready == 0) { /* exausted all sockets given by select. Request new ones */
+
+ xbt_dynar_cursor_unlock(sockets);
+ break;
+ }