Здравствуйте!
Мне необходимо использовать 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.
Помогите пожалуйста разобраться с проблемой.