--- a/eglibc-2.13/hurd/hurdselect.c 2012-10-21 22:55:26.000000000 +0200 +++ b/eglibc-2.13/hurd/hurdselect.c 2012-12-18 11:09:58.000000000 +0100 @@ -239,10 +239,10 @@ _hurd_select (int nfds, { int type = d[i].type; d[i].reply_port = __mach_reply_port (); - err = __io_select (d[i].io_port, d[i].reply_port, - /* Poll only if there's a single descriptor. */ - (firstfd == lastfd) ? to : 0, - &type); + if (pollfds) + err = __io_select (d[i].io_port, d[i].reply_port, firstfd == lastfd ? to : 0, &type); + else + err = __io_select (d[i].io_port, d[i].reply_port, 0, &type); switch (err) { case MACH_RCV_TIMED_OUT: @@ -337,6 +337,8 @@ _hurd_select (int nfds, } msg; mach_msg_option_t options = (timeout == NULL ? 0 : MACH_RCV_TIMEOUT); error_t msgerr; + if (pollfds) + to = ((firstfd == lastfd) ? 0 : to); while ((msgerr = __mach_msg (&msg.head, MACH_RCV_MSG | options, 0, sizeof msg, portset, to,