2005-11-21 Jakub Jelinek * sunrpc/bindrsvprt.c (bindresvport): Wrap around to startport in the loop if port is bigger than endport, initially set to ENDPORT. When changing startport, set endport and port appropriately. --- libc/sunrpc/bindrsvprt.c 23 May 2005 19:03:43 -0000 1.11 +++ libc/sunrpc/bindrsvprt.c 22 Nov 2005 04:39:05 -0000 1.12 @@ -74,14 +74,13 @@ bindresvport (int sd, struct sockaddr_in int res = -1; int nports = ENDPORT - startport + 1; + int endport = ENDPORT; again: for (i = 0; i < nports; ++i) { sin->sin_port = htons (port++); - if (port > ENDPORT) - { - port = startport; - } + if (port > endport) + port = startport; res = __bind (sd, sin, sizeof (struct sockaddr_in)); if (res >= 0 || errno != EADDRINUSE) break; @@ -90,7 +89,9 @@ bindresvport (int sd, struct sockaddr_in if (i == nports && startport != LOWPORT) { startport = LOWPORT; + endport = STARTPORT - 1; nports = STARTPORT - LOWPORT; + port = LOWPORT + port % (STARTPORT - LOWPORT); goto again; }