Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Локальные сети персональных компьютеров. Использование протоколов IPX, SPX, NETBIOS

© Александр Фролов, Григорий Фролов
Том 4, М.: Диалог-МИФИ, 1993, 160 стр.

[Назад] [Содеожание] [Дальше]

2.6. Другие функции IPX и AES

Для разработки большинства сетевых программ, ориентированных на передачу данных с использованием протокола IPX, вполне достаточно описанных выше функций. Однако для полноты картины опишем остальные функции, имеющие отношение к протоколу IPX.

Мы рассмотрим также функции асинхронного планировщика событий AES (Asynchronous Event Scheduer), выполняющегося как процесс внутри драйвера IPX.

2.6.1. Еще одна функция IPX

IPXDisconnectFromTaget

На входе: BX = 0Bh.
ES:SI = Указатель на структуру, содержащую сетевой адрес станции:
struct NetworkAddress {
 unsigned char Network[4];
 unsigned char Node[6];
 unsigned char Socket[2];
};






На выходе: Регистры не используются.

Эта функция используется программой для того, чтобы сообщить сетевому коммуникационному драйверу, что она (программа) больше не будет посылать пакеты на указанную станцию. Соответствующий драйвер освобождает виртуальный канал на уровне платы сетевого адаптера для указанного сетевого адреса.

Функцию IPXDisconnectFromTaget нельзя вызывать из программы ESR.

2.6.2. Функции AES

Если вашей программе требуется измерять временные интервалы, она может воспользоваться асинхронным планировщиком событий AES, реализованным
в рамках драйвера IPX.

Для функций AES можно использовать тот же формат ECB, что и для функций IPX. Однако поля используются немного по-другому:

struct AES_ECB {
        void far* Link;
        void (far *ESRAddress)();
        unsigned char InUse;
        unsigned char AESWorkspace[5];
};



Поле AESWorkspace используется планировщиком AES. Назначение остальных полей полностью аналогично соответствующим полям обычного ECB.

IPXScheduleIPXEvent

На входе: BX = 05h.
AX = Время задержки в тиках таймера.
ES:SI = Указатель на блок ECB.
На выходе: Регистры не используются.

Функция IPXScheduleIPXEvent немедленно возвращает управление вызвавшей ее программе. После истечения временного интервала, заданного в регистре AX, поле InUse блока ECB, адрес которого задавался при вызове этой функции, сбрасывается в ноль. После этого вызывается программа ESR, если она была задана для данного ECB.

Обычно функция IPXScheduleIPXEvent используется внутри ESR, для того чтобы отложить на некоторое время обработку принятого пакета.

IPXGetIntervalMarker

На входе: BX = 08h.
На выходе: AX = Интервальный маркер.

Эта функция может использоваться для измерения временных интервалов в пределах примерно одного часа.

Возвращаемое значение - интервальный маркер - это значение, лежащее в интервале от 0000h до FFFFh и представляющее собой время в тиках таймера (следуют с интервалом примерно 1/18 секунды).

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

Отметим, что вместо использования этой функции можно опрашивать значение двойного слова в области данных BIOS по адресу 0000h:046Ch. В этом слове хранится счетчик тиков таймера, значение которого обновляется каждые 55 миллисекунд.

IPXCancelEvent

На входе: BX = 06h.
ES:SI = Указатель на блок ECB.
На выходе: AL = Код завершения:
00h - функция выполнена без ошибок;
F9h - обработка ECB не может быть отменена;
FFh - указанный ECB не используется.

Функция отменяет ожидание события, связанное с указанным блоком ECB. С помощью этой функции можно отменить ожидание приема или передачи пакета, ожидание временного интервала, управляемого AES, или ожидание приема пакета SPX.

После отмены ECB поле CCode в нем устанавливается в соответствующее состояние, поле InUse устанавливается в нуль. Для отмененного ECB программа ESR не вызывается.

IPXRelinquishControl

На входе: BX = 0Ah.
На выходе: Регистры не используются.

Мы уже описывали эту функцию, предназначенную для выделения драйверу IPX процессорного времени, необходимого для его правильной работы. Приведем здесь ее еще раз, так как она по своему функциональному назначению относится к функциям асинхронного планировщика событий AES.

[Назад] [Содеожание] [Дальше]