Cygwin: bindresvport_sa: Ignore incoming port number
Ignore port number just like glibc, otherwise suffer EADDRINUSE in subsequent connect calls. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
9dc34cea28
commit
34f031982f
|
@ -2467,7 +2467,6 @@ cygwin_bindresvport_sa (int fd, struct sockaddr *sa)
|
||||||
struct sockaddr_storage sst;
|
struct sockaddr_storage sst;
|
||||||
struct sockaddr_in *sin = NULL;
|
struct sockaddr_in *sin = NULL;
|
||||||
struct sockaddr_in6 *sin6 = NULL;
|
struct sockaddr_in6 *sin6 = NULL;
|
||||||
in_port_t port;
|
|
||||||
socklen_t salen;
|
socklen_t salen;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
|
@ -2489,27 +2488,20 @@ cygwin_bindresvport_sa (int fd, struct sockaddr *sa)
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
salen = sizeof (struct sockaddr_in);
|
salen = sizeof (struct sockaddr_in);
|
||||||
sin = (struct sockaddr_in *) sa;
|
sin = (struct sockaddr_in *) sa;
|
||||||
port = sin->sin_port;
|
|
||||||
break;
|
break;
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
salen = sizeof (struct sockaddr_in6);
|
salen = sizeof (struct sockaddr_in6);
|
||||||
sin6 = (struct sockaddr_in6 *) sa;
|
sin6 = (struct sockaddr_in6 *) sa;
|
||||||
port = sin6->sin6_port;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
set_errno (EPFNOSUPPORT);
|
set_errno (EPFNOSUPPORT);
|
||||||
__leave;
|
__leave;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If a non-zero port number is given, try this first. If that succeeds,
|
/* Originally we tried to use the incoming port number first here,
|
||||||
or if the error message is serious, return. */
|
but that may lead to EADDRINUSE scenarios when calling bindresvport
|
||||||
if (port)
|
on the client side. So we ignore any port value that the caller
|
||||||
{
|
supplies, just like glibc. */
|
||||||
ret = fh->bind (sa, salen);
|
|
||||||
if (!ret || (get_errno () != EADDRINUSE && get_errno () != EINVAL))
|
|
||||||
__leave;
|
|
||||||
}
|
|
||||||
|
|
||||||
LONG myport;
|
LONG myport;
|
||||||
|
|
||||||
for (int i = 0; i < NUM_PORTS; i++)
|
for (int i = 0; i < NUM_PORTS; i++)
|
||||||
|
|
Loading…
Reference in New Issue