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