Commit a549245d authored by Bruno Jesus's avatar Bruno Jesus Committed by Alexandre Julliard

ws2_32: Fix handling of POLLHUP in WSAPoll.

parent 461bfc64
......@@ -5378,7 +5378,20 @@ int WINAPI WSAPoll(WSAPOLLFD *wfds, ULONG count, int timeout)
if (ufds[i].fd != -1)
{
release_sock_fd(wfds[i].fd, ufds[i].fd);
wfds[i].revents = convert_poll_u2w(ufds[i].revents);
if (ufds[i].revents & POLLHUP)
{
/* Check if the socket still exists */
int fd = get_sock_fd(wfds[i].fd, 0, NULL);
if (fd != -1)
{
wfds[i].revents = WS_POLLHUP;
release_sock_fd(wfds[i].fd, fd);
}
else
wfds[i].revents = WS_POLLNVAL;
}
else
wfds[i].revents = convert_poll_u2w(ufds[i].revents);
}
else
wfds[i].revents = WS_POLLNVAL;
......
......@@ -6672,7 +6672,6 @@ static void test_WSAPoll(void)
POLL_SET(fdWrite, POLLIN);
ret = pWSAPoll(fds, ix, poll_timeout);
ok(ret == 1, "expected 1, got %d\n", ret);
todo_wine
ok(POLL_ISSET(fdWrite, POLLHUP), "fdWrite socket events incorrect\n");
ret = recv(fdWrite, tmp_buf, sizeof(tmp_buf), 0);
ok(ret == 0, "expected 0, got %d\n", ret);
......@@ -6737,7 +6736,6 @@ todo_wine
POLL_SET(fdWrite, POLLIN);
ret = pWSAPoll(fds, ix, poll_timeout);
ok(ret == 1, "expected 1, got %d\n", ret);
todo_wine
ok(POLL_ISSET(fdWrite, POLLNVAL), "fdWrite socket events incorrect\n");
WaitForSingleObject (thread_handle, 1000);
closesocket(fdRead);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment