How can I set the timeout for the connect() system call?
First, create the socket and put it into non-blocking mode, then call connect(). There are three possibilities:
- connect succeeds: the connection has been successfully made (this usually only happens when connecting to the same machine)
- connect fails: obvious
- connect returns -1/EINPROGRESS. The connection attempt has begun, but not yet completed.
If the connection succeeds:
- the socket will select() as writable (and will also select as readable if data arrives)
If the connection fails:
- 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.
No comments:
Post a Comment