Лучшее портативное решение - использовать собственный тайм-аут, чтобы убедиться, что вы можете положиться на известное значение:
1) перед connect()
ing установите клиентский сокет неблокирующим. Используйте ioctl()
и флаг FIONBIO
или fcntl()
и O_NONBLOCK
. Под Win32 используйте ioctlsocket()
и FIONBIO
flag.
2) connect()
к удаленному узлу: если connect()
успешно, все в порядке, вы подключены.
3) Однако, если connect()
возвращает -1 и задает errno
равным EINPROGRESS
(WSAEWOULDBLOCK
под Win32), просто select()
дескриптор сокета для записи с вашим собственным временем ожидания.