* 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.
This commit is contained in:
Ulrich Drepper 2005-11-22 04:39:40 +00:00
parent 24eb865839
commit 15a493c3b7
2 changed files with 12 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2005-11-21 Jakub Jelinek <jakub@redhat.com>
* 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.
2005-11-21 Ulrich Drepper <drepper@redhat.com>
* Makefile.in: Remove RCS ID line.

View File

@ -74,14 +74,13 @@ bindresvport (int sd, struct sockaddr_in *sin)
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 *sin)
if (i == nports && startport != LOWPORT)
{
startport = LOWPORT;
endport = STARTPORT - 1;
nports = STARTPORT - LOWPORT;
port = LOWPORT + port % (STARTPORT - LOWPORT);
goto again;
}