X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/13bf534d2abb679d945719b02071e03c38d64b63..a9af1b0795c4a75f8919d7a87491fe7ab041b272:/src/gras/Transport/rl_transport.c diff --git a/src/gras/Transport/rl_transport.c b/src/gras/Transport/rl_transport.c index 6d65d78340..b10be517b2 100644 --- a/src/gras/Transport/rl_transport.c +++ b/src/gras/Transport/rl_transport.c @@ -42,7 +42,12 @@ gras_socket_t gras_trp_select(double timeout) { gras_socket_t sock_iter; /* iterating over all sockets */ int cursor; /* iterating over all sockets */ - + /* Check whether there is more data to read from the socket we selected last time. + This can happen with tcp buffered sockets since we try to get as much data as we can for them */ + static gras_socket_t _lastly_selected_socket = NULL; + if (_lastly_selected_socket && _lastly_selected_socket->moredata) + return _lastly_selected_socket; + /* Compute FD_SETSIZE */ #ifdef HAVE_SYSCONF fd_setsize = sysconf( _SC_OPEN_MAX ); @@ -59,7 +64,7 @@ gras_socket_t gras_trp_select(double timeout) { now = gras_os_time(); DEBUG2("wakeup=%f now=%f",wakeup, now); if (now == -1 || now >= wakeup) { - /* didn't find anything */ + /* didn't find anything; no need to update _lastly_selected_socket since its moredata is 0 (or we would have returned it directly) */ THROW1(timeout_error,0, "Timeout (%f) elapsed with selecting for incomming connexions", timeout); @@ -182,12 +187,14 @@ gras_socket_t gras_trp_select(double timeout) { } else { /* Got a suited socket ! */ XBT_OUT; + _lastly_selected_socket = sock_iter; return sock_iter; } } else { /* This is a file socket. Cannot recv() on it, but it must be alive */ XBT_OUT; + _lastly_selected_socket = sock_iter; return sock_iter; }