How can I put a timeout on connect()?
Answer / chaitanya
First, create the socket and put it into non-blocking mode, then call connect(). There are three possibilities:
o connect succeeds: the connection has been successfully made (this usually only happens when connecting to the same machine)
o connect fails: obvious
o connect returns -1/EINPROGRESS. The connection attempt has begun, but not yet completed.
If the connection succeeds:
o the socket will select() as writable (and will also select as readable if data arrives)
If the connection fails:
o the socket will select as readable *and* writable, but either a read or write will return the error code from the connection attempt. Also, you can use getsockopt(SO_ERROR) to get the error status - but be careful; some systems return the error code in the result parameter of getsockopt(), but others (incorrectly) cause the getsockopt call itself to fail with the stored value as the error.
| Is This Answer Correct ? | 0 Yes | 0 No |
How can I find the full hostname (FQDN) of the system I am running on?
What is the difference between read() and recv()?
What exactly does SO_REUSEADDR do?
What exactly does SO_KEEPALIVE do?
How can I read ICMP errors from connected UDP sockets?
How do I get my server to find out the clients address / host- name?
How come I get address already in use from bind()?
What's the difference between a socket and a port?
What is a sae socket?
Why do I keep getting EINTR from the socket calls?
Why do not my sockets close?
system choose one for me on the connect() call? Should I bind() a port number in my client program, or let the?