server: Explicitly forbid connecting a listening or connected socket.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51381 Signed-off-by: Zebediah Figura <zfigura@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
34e3301b19
commit
3b33a6b487
|
@ -6626,14 +6626,14 @@ static void test_connect(void)
|
|||
WSASetLastError(0xdeadbeef);
|
||||
iret = connect(listener, (struct sockaddr *)&address, sizeof(address));
|
||||
ok(iret == -1, "got %d\n", iret);
|
||||
todo_wine ok(WSAGetLastError() == WSAEINVAL, "got error %u\n", WSAGetLastError());
|
||||
ok(WSAGetLastError() == WSAEINVAL, "got error %u\n", WSAGetLastError());
|
||||
|
||||
WSASetLastError(0xdeadbeef);
|
||||
overlapped.Internal = 0xdeadbeef;
|
||||
overlapped.InternalHigh = 0xdeadbeef;
|
||||
iret = pConnectEx(listener, (struct sockaddr *)&address, sizeof(address), NULL, 0, &bytesReturned, &overlapped);
|
||||
ok(!iret, "got %d\n", iret);
|
||||
todo_wine ok(WSAGetLastError() == WSAEINVAL, "got error %u\n", WSAGetLastError());
|
||||
ok(WSAGetLastError() == WSAEINVAL, "got error %u\n", WSAGetLastError());
|
||||
ok(overlapped.Internal == STATUS_PENDING, "got status %#x\n", (NTSTATUS)overlapped.Internal);
|
||||
todo_wine ok(overlapped.InternalHigh == 0xdeadbeef, "got size %Iu\n", overlapped.InternalHigh);
|
||||
|
||||
|
@ -6706,7 +6706,7 @@ static void test_connect(void)
|
|||
|
||||
WSASetLastError(0xdeadbeef);
|
||||
iret = connect(connector, (struct sockaddr *)&address, sizeof(address));
|
||||
todo_wine ok(iret == -1, "got %d\n", iret);
|
||||
ok(iret == -1, "got %d\n", iret);
|
||||
todo_wine ok(WSAGetLastError() == WSAEINVAL, "got error %u\n", WSAGetLastError());
|
||||
|
||||
WSASetLastError(0xdeadbeef);
|
||||
|
@ -6740,8 +6740,8 @@ static void test_connect(void)
|
|||
|
||||
WSASetLastError(0xdeadbeef);
|
||||
iret = connect(connector, (struct sockaddr *)&address, sizeof(address));
|
||||
todo_wine ok(iret == -1, "got %d\n", iret);
|
||||
todo_wine ok(WSAGetLastError() == WSAEISCONN, "got error %u\n", WSAGetLastError());
|
||||
ok(iret == -1, "got %d\n", iret);
|
||||
ok(WSAGetLastError() == WSAEISCONN, "got error %u\n", WSAGetLastError());
|
||||
|
||||
WSASetLastError(0xdeadbeef);
|
||||
iret = connect(acceptor, (struct sockaddr *)&address, sizeof(address));
|
||||
|
|
|
@ -2164,12 +2164,25 @@ static int sock_ioctl( struct fd *fd, ioctl_code_t code, struct async *async )
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (sock->state == SOCK_CONNECTING)
|
||||
switch (sock->state)
|
||||
{
|
||||
case SOCK_LISTENING:
|
||||
set_error( STATUS_INVALID_PARAMETER );
|
||||
return 0;
|
||||
|
||||
case SOCK_CONNECTING:
|
||||
/* FIXME: STATUS_ADDRESS_ALREADY_ASSOCIATED probably isn't right,
|
||||
* but there's no status code that maps to WSAEALREADY... */
|
||||
set_error( params->synchronous ? STATUS_ADDRESS_ALREADY_ASSOCIATED : STATUS_INVALID_PARAMETER );
|
||||
return 0;
|
||||
|
||||
case SOCK_CONNECTED:
|
||||
set_error( STATUS_CONNECTION_ACTIVE );
|
||||
return 0;
|
||||
|
||||
case SOCK_UNCONNECTED:
|
||||
case SOCK_CONNECTIONLESS:
|
||||
break;
|
||||
}
|
||||
|
||||
unix_len = sockaddr_to_unix( addr, params->addr_len, &unix_addr );
|
||||
|
|
Loading…
Reference in New Issue