Перейти к содержанию

select() HELP !


Гость

Рекомендуемые сообщения

Имею следующий текст на C:

fd_set rfds;

struct timeval tv;

FD_ZERO( &rfds );FD_SET( my_opened_socket, &rfds );

tv.tv_sec = 3;

tv.tv_usec = 0;

if ( select( 1, &rfds, NULL, NULL, &tv ) > 0 )

recv( my_opened_socket, buff, size );

Вообщем, хочу ждать данных из сокета не более 3х секунд, а в результате при 100% наличии данных всё - равно чего-то ждёт и возвращет 0.

Этот - же текст пробовал для дестриптора 0 (stdin), всё нормально

работает.

Для сокетов select вообще работает ? Если нет, то что использовать?Если да, то где ошибка ?

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Сам уж наверное догадался, что первым параметром является максимальный файловый дескриптор + 1. Те если сокет открыт под дескриптором 4 то первый параметр 5

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

А тогда супер-вопрос. Создал регуляр-файл. И делаю на нем селект: например так:

select(fd+1,&rd_set,NULL,NULL,NULL)

Он не ждет! А ведь файл-то пустой.

Тогда делаю так:

select(fd+1,NULL,NULL,&rd_set,NULL)

Он не ждет, дак ведь ошибок-то в файле нет!

Объясните ламеру, в чем проблема, чего я недопонимаю...

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...