July 29, 2008

timeout for connect()

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.
More at : http://docs.linux.cz/programming/c/sock-faq/unix-socket-faq-3.html#ss3.5

No comments:

Post a Comment