Ticket #13: Socket.d-linux_select_bug

File Socket.d-linux_select_bug, 1.6 kB (added by jcomellas, 3 years ago)

Fix for problem with select() usage in Linux

Line 
1 --- Socket.d    2006-01-30 13:38:25.000000000 -0300
2 +++ Socket.d.patched    2006-01-30 13:38:15.000000000 -0300
3 @@ -1564,6 +1564,7 @@
4          body
5          {
6                  fd_set* fr, fw, fe;
7 +                socket_t maxfd;
8                  
9                  version(Win32)
10                  {
11 @@ -1582,7 +1583,7 @@
12                  int result;
13                
14                  // MANGO: if select() was interrupted, we now try again
15 -                while ((result = .select (socket_t.max - 1, fr, fw, fe, tv)) == -1)             
16 +                while ((result = .select (maxfd + 1, fr, fw, fe, tv)) == -1)             
17                          version(Win32)
18                          {
19                                  if(WSAGetLastError() != WSAEINTR)
20 @@ -2088,6 +2089,7 @@
21  //        private:
22          private uint nbytes; //Win32: excludes uint.size "count"
23          private byte* buf;
24 +        private socket_t maxfd = 0;
25          
26          
27          version(Win32)
28 @@ -2193,6 +2195,15 @@
29  
30  
31          ***********************************************************************/
32 +        socket_t maxFd()
33 +        {
34 +                return maxfd;
35 +        }
36 +
37 +        /***********************************************************************
38 +
39 +
40 +        ***********************************************************************/
41  
42          void reset()
43          {
44 @@ -2226,6 +2237,9 @@
45          }
46          body
47          {
48 +                if (s > maxfd)
49 +                        maxfd = s;
50 +
51                  version(Win32)
52                  {
53                          uint c = count;