Интегрированные сети ISDN


Таблица Возможные значения параметра lEvent оператора WSAAsyncSelect



Таблица 7.6. Возможные значения параметра lEvent оператора WSAAsyncSelect

Значение

Назначение

FD_READ

Готовность к чтению

FD_WRITE

Готовность к записи

FD_OOB

Поступление Out_Of_Band данных

SD_ACCEPT

Контроль установки входного соединения

FD_CONNECT

Контроль реализованных соединений

FD_CLOSE

Контроль закрытия соединения

При необходимости контроля комбинации вышеперечисленных состояний эти маски могут объединяться по ИЛИ. Как только состояние соединителя станет соответствовать выбранной маске, Windows пошлет прикладной программе соответствующее сообщение. Это сообщение содержит дескриптор окна, откуда осуществлен вызов процедуры WSAAsyncSelect, идентификатор сообщения, а также 16-битовый и 32- битовый параметры этого сообщения. Первый из них представляет собой дескриптор соединителя, где это событие произошло. Младшие 16 бит второго параметра являются кодом события, а старшие предназначены для записи кода ошибок, если они произошли.

Как уже было отмечено, обращение к WSAAsyncSelect переводит соединитель в неблокирующее состояние. При необходимости реализовать, например, процедуру recv, следует обратиться с начала к WSAAsyncSelect, запросив Windows информировать вас о готовности чтения (lEvent=FD_READ). После этого обработчик сообщений windows при получении соответствующего сигнала предоставит возможность прикладной программе перейти к выполнению операции recv. Так как соединитель уже получил данные, блокировки не произойдет и программа их немедленно получит.

Особое внимание блокирующим операциям должно быть уделено в Windows 3.1, поскольку блокировка остановит не только выполнение задачи, вызвавшей эту операцию, но и все другие приложения (ЭВМ станет неуправляемой на время блокировки). Здесь блокирующие процедуры должны быть запрещены, вместо этого при необходимости вызова такой процедуры windows реализует цикл по проверке состояния соединителя (очереди сообщений). Остальные приложения могут при этом продолжить свою работу, а при получении благоприятного сообщения Windows разрешает выполнение блокирующей процедуры, так как она уже не может вызвать блокировки. Осложнения могли бы возникнуть, если обработчик сообщений Windows получит сигнал, который приведет к вызову другой блокирующей процедуры. Сегодня в Windows действует правило, запрещающее такие вызовы из прикладных программ как блокирующие, так и неблокирующие. То есть, на время выполнения блокирующей процедуры все обращения к сетевому интерфейсу запрещены.

Имеется несколько операторов Winsock, предназначенных для работы с блокирующими процедурами (смотри таблицу 7.7):




Начало  Назад  Вперед