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?
Check return value of
connect(2)– you should be getting-1, andEINPROGRESSinerrno(3). Then add socket file descriptor to a poll set, and wait on it withselect(2)orpoll(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.