ws2_32: Fix handling of POLLHUP in WSAPoll.

Signed-off-by: Bruno Jesus <00cpxxx@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Bruno Jesus 2016-09-13 15:38:15 -03:00 committed by Alexandre Julliard
parent 461bfc64ba
commit a549245dfc
2 changed files with 14 additions and 3 deletions

View File

@ -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;

View File

@ -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);