WinSock: select |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
WinSock: select |
silver |
22.07.2003 8:12
Сообщение
#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 - 5.01.2005 12:39 |
mj |
22.07.2003 8:23
Сообщение
#2
|
Adminь Группа: Администраторы Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: 5 |
Попробуй найти в уже написанных компонентах каким образом идёт запрос количества данных в очереди сокета...
Я щас точно не помню, но вроде это не через select делается... |
silver |
22.07.2003 8:56
Сообщение
#3
|
Группа: Пользователи Сообщений: 3 Репутация: 0 |
Хм... Уточняю:
Программа работает в локальной сети по TCP/IP (проще говоря, ЧАТ ) Общение идет через broadcast-сообщения, потому и сокеты настроены соотвственно. Кстати, может все же что-то не так в настройках сокетов?.. Но тогда почему функция нормально работает с вариантом Select(... ,nil)? Прочитал Help по API (все по мануалу!), пролистал кучу ссылок в инете, просмотрел что есть в Делфи (кстати, единственное место, где используется функция select - это модуль SvrHTTPIndy.pas, и там все сделано аналогично тому, что я привел выше). Непонятно... |
mj |
4.08.2003 16:16
Сообщение
#4
|
Adminь Группа: Администраторы Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: 5 |
SvrHTTPIndy.pas - это дочерний компонент Indy сокета, так что искать надо в компонента сокета...
А вообще очень легко найти эту функцию отследив функцию получения количества данных в функциях стандартных сокетов... А select это совсем другое... |
silver |
5.08.2003 7:20
Сообщение
#5
|
Группа: Пользователи Сообщений: 3 Репутация: 0 |
Спасибо за помощь!
Оказалось, что перед каждым вызовом select необходимо заново заполнять fdset. А этот ньюанс в API-хелпе для Делфы не описан Теперь усе заработало |
Текстовая версия | 29.04.2024 1:06 |