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                    openssl-users@openssl.org
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to