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:
parent
461bfc64ba
commit
a549245dfc
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue