Господа, подскажите пожалуйста, как можно справиться со следующей проблемой:
Необходимо определить, произошел ли коннект клиентского сокета.
Под Windows пользуюсь функцией select с одним параметром writefds.
fd_set writeSet;
FD_ZERO( &writeSet );
FD_SET( m_socket, &writeSet );
timeval timeout = { 0, 0 };
int res = ::select( 0, 0, &writeSet, 0, &timeout );
дальше — обрабатываю возможные ошибки, проверяю,
FD_ISSET( m_socket, &writeSet )
и все отлично работает.
Под Linux, немного меняю код:
fd_set writeSet;
FD_ZERO( &writeSet );
FD_SET( m_socket, &writeSet );
timeval timeout = { 0, 0 };
int res = ::select( m_socket+1, 0, &writeSet, 0, &timeout );
При этом,
FD_ISSET( m_socket, &writeSet )
возвращает true независимо от того, успешно было соединение, или нет. Более того, true возвращается до вызова функции connect(...).
Как это можно исправить? Может быть, есть другой способ проверки успешного соединения?