Marek Marcola wrote:
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 ?
Yes.
connect() will return 0 on success. From that point on you use can use
readability indication and read() to detect closed/timeout connection.
connect() will return -1/INPROGRESS when it still waiting for the
network layer to conclude the connection attempts. Right now the TCP
layer is automatically retransmissing connection requests (SYN_SENT state).
connect() will return -1 and anything else on failure. Some possible
return values maybe ETIMEDOUT, ENETDOWN, ENETUNREACH, ENETRESET, etc...
But all of these a fatal errors and mean the same thing, but can
provide a finer grained reasoning for the cause of failure.
ETIMEDOUT the connection requests just timed out after maximum retries.
ENETDOWN the local host's network interface is not operational.
ENETUNREACH a remote network returned ICMP network unreachables for the
network.
ENETRESET the request port is not available for inbound connections at
that address.
EHOSTUNREACH a remote network returned ICMP host unreachables for the
address.
blah blah blah...
Darryl
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List [email protected]
Automated List Manager [EMAIL PROTECTED]