This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] new tcp_open


On Monday 03 December 2001 12:02 pm, Andrew Cagney wrote:
> Outch!
>
> >  /* Use Non-blocking connect.  connect() will return 0 if connected
> > already. */ n = connect (scb->fd, (struct sockaddr *) &sockaddr, sizeof
> > (sockaddr)); if (n)
> >     {
>
> Should this also be checking errno to confirm that it was EINPROGRESS?
> Little point in trying to connect to a socket that isn't valid.

The select handles it, but that isn't obvious.  I'll insert the standard 
error check after the connect.


> >  t.tv_usec = 500000; /* 0.5 seconds */
> >
> > 	  n = select (scb->fd + 1, &rset, &wset, NULL, &t);
> > 	  secs++;
> > 	}
> >       while (n == 0 && secs <= TIMEOUT);
>
> Can I just suggest tinkering with this so that the 15 seconds is clearer
> - at present it happens cos 0.5 * 30 = 15.

Yeah, it did make more sense when the select was timing out at 1 second 
intervals, but I decided to lower it to make the GUI more responsive.

How about this?

/* seconds to wait for connect */
#define TIMEOUT 15
/* how many times per second to poll ui_loop_hook */
#define POLL_INTERVAL 2

[...]

	  t.tv_sec = 0;
	  t.tv_usec = 1000000 / POLL_INTERVAL;
	  
	  n = select (scb->fd + 1, &rset, &wset, NULL, &t);
	  polls++;
	} 
      while (n == 0 && polls <= TIMEOUT * POLL_INTERVAL);
      if (n < 0 || polls > TIMEOUT * POLL_INTERVAL)
	{
	  if (polls > TIMEOUT * POLL_INTERVAL)
	    errno = ETIMEDOUT;
	  tcp_close (scb);
	  return -1;
	}

> The only other potential problem I can see is with FIONBIO.  Hopefully
> that is fairly common and where it turns out to not be available
> something can be worked out.

It really should be available everywhere.  This is standard socket stuff. If 
for some reason the socket does not get set to non-blocking, it will block, 
but still connect.

> Tried it on cygwin?
Yes.  It works.  

-- 
Martin Hunt
GDB Engineer
Red Hat, Inc.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]