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

         

Коды операций



Таблица 7.9. Коды операций



Код операции

Input Type

Output Type

Значение

SIO_ASSOCIATE_HANDLE зависит от API не использ. Связывает соединитель с заданным дескриптором интерфейса-партнера.
SIO_ENABLE_CIRCULAR_QUEUEING не использ. не использ. Разрешает организацию кольцевой очереди.
SIO_FIND_ROUTE struct sockaddr не использ. Запрос маршрута до заданного адреса.
SIO_FLUSH не использ. не использ. Аннулирует текущее содержимое очереди на отправку.
SIO_GET_BROADCAST_ADDRESS не использ. struct sockaddr Определяет протокольно-зависимый широковещательный адрес для использования в sendto/WSASendTo
SIO_GET_QOS не использ. QOS Определяет текущую спецификацию соединителя.
SIO_GET_GROUP_QOS не использ. QOS Определяет спецификацию группы, к которой принадлежит соединитель
SIO_MULTIPOINT_LOOKBACK BOOL не использ. Определяет, будут ли данные, посланные в ходе многоточечной сессии, получены соединителем локальной ЭВМ.
SIO_MULTICAST_SCOPE int не использ. Определяет режим, в котором будут осуществляться мультикастинг-обмены.
SIO_SET_QOS QOS не использ. Устанавливает новую спецификацию для соединителя.
SIO_SET_GROUP_QOS QOS не использ. Устанавливает новую спецификацию группы, к которой принадлежит соединитель.
SIO_TRANSLATE_HANDLE int зависит от API Возвращает дескриптор для соединителя s, который соответствует контексту интерфейса-партнера.

Оператор WSAAccept устанавливает условное соединение и имеет следующую структуру параметров.

WSAAccept (

IN

SOCKET

s,

OUT

struct sockaddr FAR

addr,

IN OUT

LPINT

addrlen,

IN

LPCONDITIONPROC

lpfnCondition,

IN

DWORD

dwCallbackData

);

s дескриптор соединителя, который находится в режиме listen.
addr опционный указатель на буфер (структуру), где должен храниться адрес подключаемого объекта, формат адреса определяется типом протокола, заданным при создании соединителя.
addrlen Опционный указатель на целую переменную, которая определяет длину аргумента addr.
lpfnCondition Адрес опционной условной процедуры, которая на основе полученной информации, создает группу или подключает соединитель к уже существующей группе.
dwCallbackData Параметр, возвращаемый приложению. Этот параметр не интерпретируется WinSock.
<
IN и OUT указывают на то, является ли данный параметр входным или выходные.
Программа извлекает очередную заявку на соединение из очереди соединителя s и проверяет с помощью специфицированной программы выполнение условий соединения. Если условия выполнены, возвращается флаг CF_ACCEPT, программа создает новый соединитель и осуществляет подключение его к группе в соответствии с параметром g, выработанным программой проверки условий. Вновь созданный соединитель имеет те же параметры, что и s, включая те, что задаются операторами контроля WSAAsyncSelect или WSAEventSelect. Если программа проверки условия вернула флаг CF_REJECT, запрос на соединение аннулируется. При невозможности принять решение немедленно, программа проверки условия должна вернуть флаг CF_DEFER, при этом никаких действий не предпринимается. Когда приложение будет готово обслужить запрос на соединение, оно снова запустит процедуру WSAAccept и пришлет либо CF_ACCEPT, либо CF_REJECT в качестве результата проверки условий.
Для соединителей, которые остаются в блокирующем режиме, когда в очереди нет запросов на соединение, WSAAccept блокирует вызывающую программу до появления заявки на соединение. Для соединителей неблокирующего типа, когда очередь пуста, оператор WSAAccept вернет флаг ошибки.
При завершении процедуры в addrlen будет записана реальная длина адреса в байтах. Если addr и (или) addrlen равны нулю, это означает, что нет никакой информации об адресе удаленного адресата. В противном случае эти параметры несут в себе реальную информацию не зависимо от результатов проверки условий. Прототип программы проверки условий имеет формат:

int CALLBACK

ConditionFunc(

IN LPWSABUF lpCallerId,
IN LPWSABUF lpCallerData,
IN OUT LPQOS lpSQOS,
IN OUT LPQOS lpGQOS,
IN LPWSABUF lpCalleeId,
OUT LPWSABUF lpCalleeData,
OUT GROUP FAR * g
IN DWORD dwCallbackData

);
ConditionFunc представляет собой указатель имени программы, которая служит для проверки условий. В 16-битной версии Windows, эта программа выполняется в рамках той же сессии, что и WSAAccept, поэтому вызов каких-либо иных WinSock операторов кроме WSAIsBlocking и WSACancelBlockingCall не возможен.


Программа проверки условий должна находиться в DLL или прикладном модуле. Для определения адреса программы проверки условий следует пользоваться оператором MakeProcInstance.
Переменные lpCallerId и lpCallerData являются параметрами, которые содержат адрес партнера и любую пользовательскую информацию, которая была прислана вместе с запросом на соединение.
lpSQOS представляет собой указатель на текущую спецификацию QOS соединителя s (по одной для каждого из концов виртуального канала), за которой следуют дополнительные параметры, заданные провайдером. Нулевое значение lpSQOS указывает на то, что вызывающая сторона не задала значения QOS.
lpGQOS - указатель на спецификацию QOS группы соединителей, созданной запрашивающей стороной (для каждого из направлений обмена), за которой следуют дополнительные параметры, заданные провайдером.
lpCalleeId представляет собой локальный адрес вызывающей стороны.
lpCalleeData используется программой проверки условий для записи результатов ее работы.
lpCalleeData первоначально содержит размер буфера, предназначенного для сервис провайдера. Положение буфера определяется указателем lpCalleeData->buf. Программа проверки условий должна скопировать lpCalleeData->len байт в lpCalleeData->buf, а затем провести актуализацию lpCalleeData->len, с тем чтобы сообщить действительное число переданных байтов.
В таблице 7.10 представлен перечень кодов-сообщений об ошибках вместе с их эквивалентами для Berkley-соединителей.

Содержание раздела