Received: from red.csi.cam.ac.uk (exim@red.csi.cam.ac.uk [131.111.8.70]) by hub.org (8.9.3/8.9.3) with ESMTP id LAA64707 for ; Sun, 18 Jul 1999 11:59:07 -0400 (EDT) (envelope-from ewan@cam.ac.uk) Received: from cmor.chu.cam.ac.uk ([131.111.202.213] helo=cam.ac.uk) by red.csi.cam.ac.uk with esmtp (Exim 3.02 #1) id 115tHg-00057Q-00; Sun, 18 Jul 1999 16:55:25 +0100 Date: Sun, 18 Jul 1999 17:02:29 +0100 (BST) From: eem21@cam.ac.uk Reply-To: eem21@cam.ac.uk Subject: Re: [INTERFACES] Asynchronous connect using libpq To: tgl@sss.pgh.pa.us cc: pgsql-interfaces@postgresql.org In-Reply-To: <7232.932312914@sss.pgh.pa.us> MIME-Version: 1.0 Content-Type: TEXT/plain; CHARSET=US-ASCII Message-Id: On 18 Jul, Tom Lane wrote: > eem21@cam.ac.uk writes: >> I realised that some time after I sent my first message, and have been >> thinking about it since. The delay for gethostbyname is not >> acceptable, and we are going to have to get around that problem >> elsewhere in the application anyway. Therefore, I was thinking that I >> could arrange to pass an IP address into libpq. > > A dotted-decimal address, you mean? Yeah, that sounds like it should > work. Or a struct in_addr *. I'll have to see how IPv6 addresses are being shoehorned into the socket schemes. Perhaps we could support them too. >> With regards to the connect() problem, I was hoping that by setting the >> socket to non-blocking mode before connecting (exactly as it is >> currently done after the connect call) I could solve that problem. > > By golly, there is something about non-blocking connect in the man page: > > If the socket is of type SOCK_STREAM, connect() attempts to contact > the remote host in order to make a connection between the remote > socket (peer) and the local socket specified by s. The call normally > blocks until the connection completes. If non-blocking mode has been > enabled using the O_NONBLOCK or O_NDELAY fcntl() flags or the FIOSNBIO > ioctl() request and the connection cannot be completed immediately, > connect() returns an error as described below. In these cases, > select() can be used on this socket to determine when the connection > has completed by selecting it for writing. > > Maybe you can make this work after all, with the limitation that the > user must supply a dotted-decimal IP address (or use a Unix-domain > connection) if he doesn't want to risk DNS lookup delays. > > Good luck! Thanks! Ewan.