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]