ws2_32: Check for OOB data in select() calls when not OOB_INLINED.
This commit is contained in:
parent
10f7265270
commit
10d51ce855
|
@ -4516,7 +4516,15 @@ static struct pollfd *fd_sets_to_poll( const WS_fd_set *readfds, const WS_fd_set
|
||||||
fds[j].revents = 0;
|
fds[j].revents = 0;
|
||||||
if (is_fd_bound(fds[j].fd, NULL, NULL) == 1)
|
if (is_fd_bound(fds[j].fd, NULL, NULL) == 1)
|
||||||
{
|
{
|
||||||
|
int oob_inlined = 0;
|
||||||
|
socklen_t olen = sizeof(oob_inlined);
|
||||||
|
|
||||||
fds[j].events = POLLHUP;
|
fds[j].events = POLLHUP;
|
||||||
|
|
||||||
|
/* Check if we need to test for urgent data or not */
|
||||||
|
getsockopt(fds[j].fd, SOL_SOCKET, SO_OOBINLINE, (char*) &oob_inlined, &olen);
|
||||||
|
if (!oob_inlined)
|
||||||
|
fds[j].events |= POLLPRI;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -3626,9 +3626,7 @@ static void test_select(void)
|
||||||
FD_SET(fdRead, &readfds);
|
FD_SET(fdRead, &readfds);
|
||||||
FD_SET(fdRead, &exceptfds);
|
FD_SET(fdRead, &exceptfds);
|
||||||
ret = select(0, &readfds, &writefds, &exceptfds, &select_timeout);
|
ret = select(0, &readfds, &writefds, &exceptfds, &select_timeout);
|
||||||
todo_wine
|
|
||||||
ok(ret == 1, "expected 1, got %d\n", ret);
|
ok(ret == 1, "expected 1, got %d\n", ret);
|
||||||
todo_wine
|
|
||||||
ok(FD_ISSET(fdRead, &exceptfds), "fdRead socket is not in the set\n");
|
ok(FD_ISSET(fdRead, &exceptfds), "fdRead socket is not in the set\n");
|
||||||
tmp_buf[0] = 0xAF;
|
tmp_buf[0] = 0xAF;
|
||||||
ret = recv(fdRead, tmp_buf, sizeof(tmp_buf), MSG_OOB);
|
ret = recv(fdRead, tmp_buf, sizeof(tmp_buf), MSG_OOB);
|
||||||
|
|
Loading…
Reference in New Issue