ws2_32: Return the correct error if SO_REUSEADDR is set in bind error.
This commit is contained in:
parent
473a3a47a7
commit
843ef11eb8
|
@ -2682,6 +2682,20 @@ int WINAPI WS_bind(SOCKET s, const struct WS_sockaddr* name, int namelen)
|
|||
case EADDRNOTAVAIL:
|
||||
SetLastError(WSAEINVAL);
|
||||
break;
|
||||
case EADDRINUSE:
|
||||
{
|
||||
int optval = 0;
|
||||
socklen_t optlen = sizeof(optval);
|
||||
/* Windows >= 2003 will return different results depending on
|
||||
* SO_REUSEADDR, WSAEACCES may be returned representing that
|
||||
* the socket hijacking protection prevented the bind */
|
||||
if (!getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&optval, &optlen) && optval)
|
||||
{
|
||||
SetLastError(WSAEACCES);
|
||||
break;
|
||||
}
|
||||
/* fall through */
|
||||
}
|
||||
default:
|
||||
SetLastError(wsaErrno());
|
||||
break;
|
||||
|
|
|
@ -1529,7 +1529,6 @@ static void test_so_reuseaddr(void)
|
|||
{
|
||||
trace(">= Win 2003 behavior of SO_REUSEADDR\n");
|
||||
err = WSAGetLastError();
|
||||
todo_wine
|
||||
ok(err==WSAEACCES, "expected 10013, got %d\n", err);
|
||||
|
||||
closesocket(s1);
|
||||
|
|
Loading…
Reference in New Issue