Add a patch to make the invocation of select(2) work in CEPoll::wait() method.

Applicable only to non-Linux platforms, such as FreeBSD.

Bump PORTREVISION.

Obtained from:	https://sourceforge.net/p/udt/patches/12/
This commit is contained in:
Mikhail Teterin 2014-02-11 22:35:45 +00:00
parent 446f9cc70f
commit c1d655e918
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=343828
2 changed files with 31 additions and 0 deletions

View file

@ -3,6 +3,7 @@
PORTNAME= udt
PORTVERSION= 4.11
PORTREVISION= 1
CATEGORIES= net
MASTER_SITES= SF
DISTNAME= udt.sdk.${PORTVERSION}

View file

@ -0,0 +1,30 @@
From
http://sourceforge.net/p/udt/patches/12/
--- src/epoll.cpp
+++ src/epoll.cpp
@@ -256,18 +256,23 @@ int CEPoll::wait(const int eid, set<UDTSOCKET>* readfds, set<UDTSOCKET>* writefd
FD_ZERO(&readfds);
FD_ZERO(&writefds);
+ //"select" needs to know the max file descriptor that is set in the fd_set structs
+ SYSSOCKET max_fd = 0;
+
for (set<SYSSOCKET>::const_iterator i = p->second.m_sLocals.begin(); i != p->second.m_sLocals.end(); ++ i)
{
if (lrfds)
FD_SET(*i, &readfds);
if (lwfds)
FD_SET(*i, &writefds);
+ if (*i > max_fd)
+ max_fd = *i;
}
timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 0;
- if (::select(0, &readfds, &writefds, NULL, &tv) > 0)
+ if (::select(max_fd + 1, &readfds, &writefds, NULL, &tv) > 0)
{
for (set<SYSSOCKET>::const_iterator i = p->second.m_sLocals.begin(); i != p->second.m_sLocals.end(); ++ i)
{