WinSoc32 API и select(..)?
От: flush  
Дата: 09.03.02 12:37
Оценка:
Здравствуйте!

Мне необходимо использовать WinSock32 API для обмена
небольшими сообщениями по сети. Но я столкнулся со следующей
проблемой:
Перед чтением из неблокирующего socketa я первоначально вызываю
select( ) как показано ниже.

SOCKET other_node;

...

for( ;; )
{
fd_set read_fds;
FD_ZERO( &read_fds ); FD_SET( otherNode, &read_fds );
timeval time_val; time_val.tv_sec = 1; time_val.tv_usec = 0;
int sret = select( otherNode+1, &read_fds, 0, 0, &time_val );
if( sret == SOCKET_ERROR )
throw error_read();
else
if( sret )
break;
else
continue;
}

Так вот если удаленная машина нормально закрывает соединение или
я сам завершаю процесс на ней, то выход из цикла происходит успешно.
Но если я вынимаю сетевой кабель, то цикл не прекращается никогда,
что вызывает некоторые неудобства .
Хотя в MSDN написано что select возвращает значение больше нуля
если Connection has been closed/reset/terminated.

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