Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 5 May 2005 23:08:41 -0400
From:      "J.R. Oldroyd" <fbsd@opal.com>
To:        Brian Buchanan <bwb@holo.org>
Cc:        freebsd-current@freebsd.org
Subject:   Re: async connect problem
Message-ID:  <20050506030841.GL51983@linwhf.opal.com>
In-Reply-To: <20050505193739.Y36831@thought.holo.org>
References:  <20050506023318.GK51983@linwhf.opal.com> <20050505193739.Y36831@thought.holo.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050506030841.GL51983>