1
mirror of https://code.videolan.org/videolan/vlc synced 2024-07-25 09:41:30 +02:00

poll: deal with invalid file descriptors more like specified

This commit is contained in:
Rémi Denis-Courmont 2014-08-17 16:28:36 +03:00
parent 7bbd36a5f5
commit 5ac516c9c7

View File

@ -114,7 +114,32 @@ int (poll) (struct pollfd *fds, unsigned nfds, int timeout)
val = select (val + 1, rdset, wrset, exset,
(timeout >= 0) ? &tv : NULL);
if (val == -1)
return -1;
{
#ifndef _WIN32
if (errno != EBADF)
#else
if (WSAGetLastError () != WSAENOTSOCK)
#endif
return -1;
val = 0;
for (unsigned i = 0; i < nfds; i++)
#ifndef _WIN32
if (fcntl (fds[i].fd, F_GETFD) == -1)
#else
if (getsockopt (fds[i].fd, SOL_SOCKET, SO_REUSEADDR,
&(DWORD){ 0 }, &(int){ sizeof (DWORD) }) != 0)
#endif
{
fds[i].revents = POLLNVAL;
val++;
}
else
fds[i].revents = 0;
return val ? val : -1;
}
for (unsigned i = 0; i < nfds; i++)
{