[Bug 10032] New: Wine must not use unix select() for networking where there might be high fd's

wine-bugs at winehq.org wine-bugs at winehq.org
Sun Oct 14 11:18:37 CDT 2007


http://bugs.winehq.org/show_bug.cgi?id=10032

           Summary: Wine must not use unix select() for networking where
                    there might be high fd's
           Product: Wine
           Version: CVS/GIT
          Platform: Other
        OS/Version: other
            Status: NEW
          Keywords: patch
          Severity: normal
          Priority: P2
         Component: wine-net
        AssignedTo: wine-bugs at winehq.org
        ReportedBy: dank at kegel.com


select() cannot handle fds higher than FD_SETSIZE.
Thus if you open a lot of plain old files, then 
create one socket and try to use a networking function
based on select(), you're hosed.

This actually happened recently during soak testing of an app doing
lots of wininet stuff, which tickled a socket leak
in wininet (see
http://winehq.org/pipermail/wine-patches/2007-October/045089.html
for the leak fix).  This was a wake-up call for us; the
app in question is fine after the leak fix, but an app
that really used lots of file descriptors would hit the bug 
in a bad way.

Here's how to find all the suspicious calls to select():
$ find . -name '*.c' | xargs grep '[^a-z]select[^a-zA-Z]*(.*&' | grep -v
'/tests/'
Calls where select is used with no fd's are ok, since they can't run into the
problem.  Calls which use a winsock select() instead of a unix select()
might be ok (e.g. netapi32/nbt.c), since winsock's select doesn't
have a fixed FD_SETSIZE.  Only two problematic calls remain:

wininet/internet.c:        if (select(nSocket+1,&infd,NULL,NULL,&tv) > 0)
wininet/netconnection.c:     if
(select(connection->socketFD+1,&infd,NULL,NULL,&tv) > 0)

These must be replaced with poll(), which can handle high fd's.

This was discussed last November,
 http://www.winehq.org/pipermail/wine-devel/2006-November/052099.html
and Damjan submitted patches to fix them:
http://www.winehq.org/pipermail/wine-patches/2006-November/032529.html
http://www.winehq.org/pipermail/wine-patches/2006-November/032530.html
but these patches don't seem to have been applied yet.  Time to get them in!


-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list