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