![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Hacer un connect con sockets y que no se bloqueeLa solución la explica D. J. Bernstein:Non-blocking BSD socket connectionsSituation: You set up a non-blocking socket and do a connect() that returns -1/EINPROGRESS or -1/EWOULDBLOCK. You select() the socket for writability. This returns as soon as the connection succeeds or fails. (Exception: Under some old versions of Ultrix, select() wouldn't notice failure before the 75-second timeout.) Question: What do you do after select() returns writability? Did the connection fail? If so, how did it fail? [...] Another possibility is getpeername(). If the socket is connected, getpeername() will return 0. If the socket is not connected, getpeername() will return ENOTCONN, and read(fd,&ch,1) will produce the right errno through error slippage. This is a combination of suggestions from Douglas C. Schmidt and Ken Keys. [...] |