server: fix connect failures on newer kernels

Marcus Meissner marcus at jet.franken.de
Mon Jan 24 02:30:13 CST 2011


On Mon, Jan 24, 2011 at 12:21:15AM -0500, Mike Kaplinskiy wrote:
> For some reason the newer kernels report POLLOUT|POLLERR|POLLHUP when
> connect() fails. Strip the POLLOUT in this case. This (hopefully)
> fixes bug 25456.

> diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
> index 1b81544..3c6425e 100644
> --- a/dlls/ws2_32/tests/sock.c
> +++ b/dlls/ws2_32/tests/sock.c
> @@ -3965,7 +3965,7 @@ static void test_ConnectEx(void)
>      closesocket(listener);
>      listener = INVALID_SOCKET;
>  
> -    address.sin_port = 1;
> +    address.sin_port = htons(1);
>  
>      bret = pConnectEx(connector, (struct sockaddr*)&address, addrlen, NULL, 0, &bytesReturned, &overlapped);
>      ok(bret == FALSE && GetLastError(), "ConnectEx to bad destination failed: "
> diff --git a/server/sock.c b/server/sock.c
> index d37a316..134efb0 100644
> --- a/server/sock.c
> +++ b/server/sock.c
> @@ -388,6 +388,9 @@ static void sock_poll_event( struct fd *fd, int event )
>  
>      if (sock->state & FD_CONNECT)
>      {
> +        if (event & POLLOUT && event & (POLLERR|POLLHUP))
> +          event &= ~POLLOUT;

Add more braces to make the operator precedence a bit more clear...
(just a style issue though)

Ciao, Marcus




More information about the wine-devel mailing list