Commit 2d919681 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont Committed by Jean-Baptiste Kempf

poll: deal with invalid file descriptors more like specified

(cherry picked from commit 5ac516c9c7a2acfdc5b8f9d94eb3833efa7f26cc)
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent 22a0bdd4
...@@ -114,8 +114,33 @@ int (poll) (struct pollfd *fds, unsigned nfds, int timeout) ...@@ -114,8 +114,33 @@ int (poll) (struct pollfd *fds, unsigned nfds, int timeout)
val = select (val + 1, rdset, wrset, exset, val = select (val + 1, rdset, wrset, exset,
(timeout >= 0) ? &tv : NULL); (timeout >= 0) ? &tv : NULL);
if (val == -1) if (val == -1)
{
#ifndef _WIN32
if (errno != EBADF)
#else
if (WSAGetLastError () != WSAENOTSOCK)
#endif
return -1; 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++) for (unsigned i = 0; i < nfds; i++)
{ {
int fd = fds[i].fd; int fd = fds[i].fd;
......
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