Hello,
> Girish Venkatachalam wrote:
> > I don't know what is supposed to happen in theory, but
> > in practice I have found select() to be quite a
> > disaster in informing me when a socket becomes
> > writable. I have seen this on both Linux and FreeBSD.
> >
> > select() is very useful and an elegant solution for
> > multiplexing sockets and doing non blocking IO.
> > However it is useful only for getting to know when a
> > socket becomes ready for read.
>
> select() / poll() for writablity on a not-yet-connected socket works
> reliability. Once it becomes connected (or an error occured because it
> can't get connected) its writability will be signalled. Your
> application calls connect() again this time it returns 0 and you stop
> waiting for connection now and start using the socket to convey data.
I agree, and what I may suggest more is to check socket state
after successful connect() on non-blocking socket
For example:
/* check socket error state - only if val == 0 after this call
* connection is properly established.
*/
len = sizeof(int);
if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (void *) &state, &len) < 0) {
goto err;
}
if (state != 0) {
/* socket state error - setting errno */
errno = state;
goto err;
}
Or maybe I doing too much ?
Best regards,
--
Marek Marcola <[EMAIL PROTECTED]>
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List [email protected]
Automated List Manager [EMAIL PROTECTED]