IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> WinSock: select
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3

Репутация: -  0  +


Уважаемый All!
При работе с сокетами использую функцию Select для проверки входящих сообщений. Последним параметром функции является либо время ожидания (через указатель на структуру), либо NULL. В последнем случае функция ждет до получения чего-либо.
Проблема в следущем: если передаю NULL, все нормально работает. А вот если пытаюсь только проверить состояние, то данных нет, и периодически появлется SOCKET_ERROR.
Код следующий:
Код
var Wait: TTimeVal;
...
 Wait.tv_sec := 0;
 Wait.tv_usec := 0;
 Res := select(0, @fdset, nil, nil, @Wait);
...

Будем полагать, что структура fdset заполнена правильно. ;)
Вопрос: как использовать функцию, чтобы результат возвращался сразу, без ожидания?

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Adminь
****

Группа: Пользователи
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

Репутация: -  5  +


Попробуй найти в уже написанных компонентах каким образом идёт запрос количества данных в очереди сокета...
Я щас точно не помню, но вроде это не через select делается...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 3

Репутация: -  0  +


Хм... Уточняю:
Программа работает в локальной сети по TCP/IP (проще говоря, ЧАТ smile.gif)
Общение идет через broadcast-сообщения, потому и сокеты настроены соотвственно. Кстати, может все же что-то не так в настройках сокетов?.. Но тогда почему функция нормально работает с вариантом Select(... ,nil)?
Прочитал Help по API (все по мануалу!), пролистал кучу ссылок в инете, просмотрел что есть в Делфи (кстати, единственное место, где используется функция select - это модуль SvrHTTPIndy.pas, и там все сделано аналогично тому, что я привел выше). Непонятно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Adminь
****

Группа: Пользователи
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

Репутация: -  5  +


SvrHTTPIndy.pas - это дочерний компонент Indy сокета, так что искать надо в компонента сокета...
А вообще очень легко найти эту функцию отследив функцию получения количества данных в функциях стандартных сокетов...
А select это совсем другое...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 3

Репутация: -  0  +


Спасибо за помощь!
Оказалось, что перед каждым вызовом select необходимо заново заполнять fdset. А этот ньюанс в API-хелпе для Делфы не описан sad.gif
Теперь усе заработало smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 20.09.2017 7:28
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"