Reputation: 1247
I'm changing a socket connection in a script to a non-blocking connection. In a tutorial I found the lines:
x=fcntl(s,F_GETFL,0); // Get socket flags
fcntl(s,F_SETFL,x | O_NONBLOCK); // Add non-blocking flag
So I added them after I create my socket and before the connect statement. And it's no longer blocking :) but it also doesn't connect. I'm not getting any errors, the connect is just returning -1. If I comment these lines out it connects.
What else do I need to add to get a non-blocking connection to connect?
Upvotes: 6
Views: 1880
Reputation: 42165
connect will probably immediately return a EINPROGRESS error. Read up on use of select.
Note that you'll probably want to wrap your call to select in the TEMP_FAILURE_RETRY macro.
Upvotes: 4
Reputation: 84159
Check return value of connect(2)
- you should be getting -1
, and EINPROGRESS
in errno(3)
. Then add socket file descriptor to a poll set, and wait on it with select(2)
or poll(2)
.
This way you can have multiple connection attempts going on at the same time (that's how e.g. browsers do it) and be able to have tighter timeouts.
Upvotes: 6