Здравствуйте flush, Вы писали:
F> Здравствуйте!
F> Мне необходимо использовать WinSock32 API для обмена
F>небольшими сообщениями по сети. Но я столкнулся со следующей
F>проблемой:
F> Перед чтением из неблокирующего socketa я первоначально вызываю
F>select( ) как показано ниже.
F> SOCKET other_node;
F> ...
F> for( ;; )
F> {
F> fd_set read_fds;
F> FD_ZERO( &read_fds ); FD_SET( otherNode, &read_fds );
F> timeval time_val; time_val.tv_sec = 1; time_val.tv_usec = 0;
F> int sret = select( otherNode+1, &read_fds, 0, 0, &time_val );
F> if( sret == SOCKET_ERROR )
F> throw error_read();
F> else
F> if( sret )
F> break;
F> else
F> continue;
F> }
F>
F> Так вот если удаленная машина нормально закрывает соединение или
F>я сам завершаю процесс на ней, то выход из цикла происходит успешно.
F>Но если я вынимаю сетевой кабель, то цикл не прекращается никогда,
F>что вызывает некоторые неудобства .
F>Хотя в MSDN написано что select возвращает значение больше нуля
F>если Connection has been closed/reset/terminated.
F> Помогите пожалуйста разобраться с проблемой.
Примерно полгода назад я писал проект на API с использованием WinSock'а. Я использовал WSAEventSelect и таких проблем не было (специально проверял).