Скачиваний:
43
Добавлен:
01.05.2014
Размер:
348.67 Кб
Скачать

3.2 Функции spx

3.2.1 Инициализация spx spxCheckInstallation

На входе:

BX

=

10h.

AL

=

00h.

На выходе:

AL

=

Код завершения: 00h - SPX не установлен; FFh - SPX установлен.

BH

=

Верхний (major) номер версии SPX.

BL

=

Нижний (minor) номер версии SPX.

CX

=

Максимальное количество каналов SPX, поддерживаемых драйвером SPX.

DX

=

Количество доступных каналов SPX.

Прежде чем использовать функции SPX, программа должна вызвать функцию SPXCheckInstallation для того, чтобы убедиться в наличии драйвера SPX.

3.2.2 Образование канала связи spxListenForConnection

На входе:

BX

=

12h.

AL

=

Счетчик повторов попыток создать канал связи.

AH

=

Флаг включения системы периодической проверки связи (Watchdog Supervision Required Flag).

ES:SI

=

Указатель на блок ECB.

На выходе:

Регистры не используются.

Эта функция используется в паре с функцией SPXEstablishConnection для образования канала связи.

Программа-сервер вызывает SPXListenForConnection, передавая ей адрес блока ECB. Этот блок будет использован для образования канала связи. Когда программа-клиент вызовет функцию SPXEstablishConnection, произойдет образование канала связи и в поле InUse блока ECB будет записано нулевое значение. Будет также вызвана соответствующая программа ESR, если задан ее адрес.

В блоке ECB необходимо определить значение поля ESRAddress и указать номер сокета. Для каждого сокета вы можете образовать несколько каналов.

Блок ECB, адрес которого задан в регистрах ES:SI, ставится драйвером SPX во внутреннюю очередь блоков ECB, ожидающих прихода пакетов от функций SPXEstablishConnection, выдаваемых другими станциями, желающими образовать канал связи.

После образования канала связи, когда в поле InUse будет записано нулевое значение, поле CCode блока ECB будет содержать код завершения:

00

канал связи создан, ошибок нет;

FFh

указанный в ECB сокет не был открыт;

FCh

запрос SPXListenForConnection был отменен функциями IPXCancelEvent или IPXCloseSocket (ESR не вызывается);

EFh

переполнилась внутренняя таблица номеров каналов связи; до тех пор, пока какой-нибудь канал не будет закрыт, вы не сможете образовать новые каналы.

Перед вызовом функции SPXListenForConnection программа должна выделить хотя бы один ECB для приема SPX-пакета. Это нужно сделать при помощи функции SPXListenForSequencedPacket (см. ниже описание функции).

Вам также надо задать в регистре AL cчетчик повторов попыток создания канала связи и в регистре AH - флаг включения системы периодической проверки связи. Вы можете задать от 1 до 255 попыток или использовать значение по умолчанию, если запишете в регистр AL нулевое значение.

Если в регистр AH будет записано ненулевое значение, драйвер SPX будет периодически проверять работоспособность канала связи, передавая специальные тестовые пакеты. Если канал вдруг перестает работать, он разрывается и в ECB, подготовленный для приема пакетов функцией SPXListenForSequencedPacket, в поле InUse проставляется нулевое значение. Поле CCode при этом будет содержать код ошибки EDh, а номер "испорченного" канала будет записан в первых двух байтах поля IPXWorkspace блока ECB.