[tolj@wapme-systems.de: Re: Problem with accept?!!

Thomas Pfaff tpfaff@gmx.net
Tue Jun 3 13:35:00 GMT 2003


Corinna Vinschen wrote:

> Thomas,
> 
> On Tue, Jun 03, 2003 at 02:01:15PM +0200, Corinna Vinschen wrote:
> 
>>FYI, I've just switch accept() to use cygwin_select instead of its own
>>thread.  Works like a charm.  fhandler_socket::accept looks like this:
>>[...]
> 
> 
> I have a complete new implementation now, using cygwin_select.  It seems
> to work really nicely.  However, would you mind to have a look into this
> before I check it in?  Again, all my tests are working fine, this time
> even the message when trying to connect an already connected socket makes
> sense :-)
> 
> I've attached the patch related to current CVS.  Note that I've moved
> the cygwin_select stuff into cygwin_connect and cygwin_accept in net.cc
> since there's the natural point at which the file descriptor is still
> accessible (instead of propagating the descriptor to the fhandler_socket
> method).
> 

I have tried this one and it looks really good. The only thing i would 
change is that i would check except_fds instead of write_fds.

Thomas


--- net.cc.org	2003-06-03 15:22:49.000000000 +0200
+++ net.cc	2003-06-03 15:24:06.000000000 +0200
@@ -794,9 +794,7 @@ cygwin_connect (int fd, const struct soc
  	      FD_SET (fd, write_fds);
  	      FD_SET (fd, except_fds);
  	      res = cygwin_select (fd + 1, NULL, write_fds, except_fds, NULL);
-	      if (res > 0 && FD_ISSET (fd, write_fds))
-	        res = 0;
-	      else if (res > 0)
+	      if (res > 0 && FD_ISSET (fd, except_fds))
  	        {
  		  res = -1;
  		  for (;;)
@@ -813,6 +811,8 @@ cygwin_connect (int fd, const struct soc
  		      low_priority_sleep (0);
  		    }
  		}
+	      else if (res > 0)
+	        res = 0;
  	      else
  	        {
  		  WSASetLastError (WSAEINPROGRESS);




More information about the Cygwin-developers mailing list