diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index eafaefd469d..a51b921caac 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -3661,7 +3661,8 @@ static int get_poll_results( WS_fd_set *readfds, WS_fd_set *writefds, WS_fd_set if (writefds) { for (i = k = 0; i < writefds->fd_count; i++, j++) - if (fds[j].revents) writefds->fd_array[k++] = writefds->fd_array[i]; + if ((fds[j].revents & POLLOUT) && !(fds[j].revents & POLLHUP)) + writefds->fd_array[k++] = writefds->fd_array[i]; writefds->fd_count = k; total += k; } diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index a171c855b27..9e6912ce4ee 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -2311,7 +2311,7 @@ static void test_errors(void) timeval.tv_usec = 50000; ret = select(1, NULL, &set, NULL, &timeval); - todo_wine ok( (ret == 0), "expected 0 (timeout), got: %d\n", ret ); + ok( (ret == 0), "expected 0 (timeout), got: %d\n", ret ); } ret = closesocket(sock); @@ -2353,8 +2353,8 @@ static void test_select(void) ret = select(maxfd+1, &readfds, &writefds, &exceptfds, &select_timeout); ok ( (ret == 0), "select should not return any socket handles\n"); ok ( !FD_ISSET(fdRead, &readfds), "FD should not be set\n"); - ok ( !FD_ISSET(fdWrite, &writefds), "FD should not be set\n"); } + ok ( !FD_ISSET(fdWrite, &writefds), "FD should not be set\n"); ok ( !FD_ISSET(fdRead, &exceptfds), "FD should not be set\n"); ok ( !FD_ISSET(fdWrite, &exceptfds), "FD should not be set\n");