async connect problem
    J.R. Oldroyd 
    fbsd at opal.com
       
    Thu May  5 20:09:02 PDT 2005
    
    
  
On May 05, 19:39, Brian Buchanan wrote:
> On Thu, 5 May 2005, J.R. Oldroyd wrote:
> 
> >Isn't our behaviour wrong...
> >
> >On 6-current, the program below prints:
> >	connect: Connection refused
> >
> >Shouldn't it print:
> >	connect: Operation now in progress
> 
> No, that's the correct behavior.  The system was able to satisfy your 
> request without blocking because you were attempting a connection to the 
> loopback, so connect() returned immediately with errno == ECONNREFUSED.
> 
> - Brian
You are correct, it does return EINPROGRESS when using a non-loopback
address.
Perhaps I should ask a different question.
Subsequent code to check the socket's status, something like:
	int n;
	socklen_t intsize = sizeof(int);
	getsockopt(f, SOL_SOCKET, SO_ERROR, (void*)&n, &intsize);
	if (n) ...
which works (with suitable cast adjustments) on Solaris, Linux,
Darwin, and yes, even on Windows, doesn't work here.
I have an alternative test that uses getpeername(), but I'm surprised
at the difference in behavior.
	-jr
    
    
More information about the freebsd-current
mailing list