Определение успешного коннекта сокета под Linux
От: MPie Россия http://perpetuumsoft.com
Дата: 14.12.05 04:25
Оценка:
Господа, подскажите пожалуйста, как можно справиться со следующей проблемой:

Необходимо определить, произошел ли коннект клиентского сокета.
Под 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(...).

Как это можно исправить? Может быть, есть другой способ проверки успешного соединения?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.