0 / 0 / 0
Регистрация: 22.02.2010
Сообщений: 9
|
05.04.2010, 09:33
[ТС]
|
3
|
Хочу получить вот это, только под Windows и для TCP/IP
РЕАЛИЗАЦИЯ МЕХАНИЗМА ТАЙМ-АУТОВ С
ИСПОЛЬЗОВАНИЕМ ПРОТОКОЛА IPX
Цель работы: изучить функции IPXScheduleIPXEvent и
IPXCancelEvent протокола IPX для планирования и отмены собы-
тий, приобрести навыки использования данных функций при раз-
работке сетевых приложений (для реализации механизмов тайм-
аутов коммуникационных протоколов).
Порядок выполнения работы
1. Изучить программный интерфейс функций
IPXScheduleIPXEvent - ПЛАНИРОВАТЬ СОБЫТИЕ и
IPXCancelEvent - ОТМЕНИТЬ СОБЫТИЕ.
2. Изучить структуру блока управления событием (блока
ECB).
3. Разработать на языке программирования высокого уровня
(Паскаль, Си или Си++) программы:
а) для планирования тайм-аута через определенный интервал
времени;
б) для планирования тайм-аута и его отмены.
4. Произвести эксперимент, заключающийся в планировании
тайм-аута и его отмене.
5. Оформить отчет о проделанной работе.
Основные сведения
Тайм-аут - это ситуация, имеющая место в том случае, когда
какой-то процесс ожидает либо наступления какого-нибудь внеш-
него события, либо окончания предварительно заданного интерва-
ла времени, и период ожидания истекает раньше, чем это внешнее
событие произойдет. Например, если процесс пересылает сообще-
ние и не обнаруживает до конца предварительно установленного
интервала времени никакого подтверждения приема, то он может
предпринять соответствующие меры, такие, как повторение пере-
дачи сообщения. В глагольной форме этот английский термин
(timeout) означает "превышать лимит времени". (см. Толковый сло-
варь по вычислительным системам / Под ред.
В.Иллингуорта,Э.Л.Глейзера, И.К.Пайла. - М.:Машиностроение,
1991. - 560 с.)
Механизм тайм-аутов заключается в определении предельных
временных интервалов ожидания какого-либо события и назначе-
ния определенных действий при истечении этого интервала, на-
пример, вызова процедур восстановления. Механизм тайм-аутов
является одним из основных при восстановлении после ошибок в
коммуникационных протоколах.
Под временем тайм-аута (иногда называемым просто тайм-
аутом) будем понимать временной интервал, на протяжении кото-
рого система будет ожидать совершения какого-либо события.
Ожидание системы может быть завершено двумя путями: либо в
результате истечения времени тайм-аута (естественное окончание),
либо путем отмены ожидания (принудительное окончание). Для
реализации механизма тайм-аутов в протоколе IPX определены
следующие функции: IPXScheduleIPXEvent и IPXCancelEvent.
Функция IPXScheduleIPXEvent
Данная функция планирует событие IPX. Интерфейс функции
IPXScheduleIPXEvent определен в библиотеке функций NetWare C
Interface следующим образом:
void IPXScheduleIPXEvent(WORD timeUnits, ECB
*eventControlBlock);
Параметры:
timeUnits - интервал времени;
eventControlBlock - указатель на блок ECB.
Функция IPXScheduleIPXEvent передает драйверу протокола
IPX время задержки и адрес блока ECB для планирования события,
определяющего тайм-аут. Затем функция возвращает управление
вызывающей прикладной программе. В это время IPX пытается
спланировать событие. Параметр timeDelay определяет время ожи-
дания (в шагах таймера) до того, как произойдет запланированное
событие. Он должен быть установлен в диапазоне от 0 до 65535
(0000h и FFFFh). Каждый интервал представляет собой один шаг
таймера IBM PC, который приблизительно равен 1/18 части секун-
ды. Это позволяет планировать событие вперед до одного часа.
Прикладная программа может вызывать данную функцию для пе-
репланирования блока ECB, предварительно подвергнувшегося
планированию. Это единственная ситуация, в которой допустимо
передавать IPX (AES) блок ECB, который все еще используется.
Поле InUseFlag устанавливается как величина (FDh), в то время
как AES (Асинхронный планировщик событий) управляет IPX-
ECB. Подпрограмма ESR также может вызывать эту функцию.
Прикладная программа никогда не должна использовать данную
функцию для передачи адреса блока ECB, который используется
IPX в это время для работы с пакетами.
Интерфейс функции IPXScheduleIPXEvent в библиотеке
NetWare C Interface, адаптированной для языка Паскаль, определя-
ется таким образом:
procedure IPXScheduleIPXEvent(timeDelay:Word; var theECB);
Низкоуровневый интерфейс функции IPXScheduleIPXEvent
определяется следующим образом:
Ia aoiaa: BX = 05h
AX = A?aiy caaa?aeee a oeeao oaeia?a;
ES:SI = Oeacaoaeu ia aeie ECB.
Ia auoiaa: ?aaeno?u ia eniieuco?ony
Функция IPXCancelEvent
Данная функция отменяет событие, определенное блоком ECB.
Интерфейс функции IPXCancelEvent определен в библиотеке
функций NetWare C Interface следующим образом:
int IPXCancelEvent(ECB *eventControlBlock);
Параметры: eventControlBlock - указатель на блок ECB.
Возвращаемые значения:
00h - успешное выполнение:
F9h - ECB не может быть отменен;
FCh - событие отменено;
FFh - ECB не используется.
Отменяемый блок ECB может контролировать такие действия,
как отправка или ожидание пакета, планирование или переплани-
рование.
Интерфейс функции IPXCancelEvent в библиотеке NetWare C
Interface, адаптированной для языка Паскаль, определяется таким
образом:
function IPXCancelEvent(var theECB): Word;
Низкоуровневый интерфейс функции IPXCancelEvent оп-
ределяется следующим образом:
На входе: BX = 06h;
ES:SI = Указатель на блок ECB
На выходе: AL = Код завершения.
Методические указания
Необходимо разработать две программы. Первая программа
организует тайм-аут, запускает его и после окончания тайм-аута
выводит диагностическое сообщение об его окончании. Вторая
программа строится на основе первой. Она организует тайм-аут,
запускает его с возможностью отмены тайм-аута при нажатии ка-
кой-либо клавиши (см. функции keypressed и readkey языка Borland
Pascal, а также функции kbhit и getch языка Borland C). Должны
выводиться сообщения о естественном или принудительном окон-
чании тайм-аута.
Перед работой с функциями IPXScheduleIPXEvent и
IPXCancelEvent необходимо заполнить соответствующие поля бло-
ка ECB. При работе с библиотекой NetWare C Interface при орга-
низации тайм-аутов рекомендуется заполнять также поле
SocketNumber блока ECB. При этом сокет SocketNumber должен
быть открыт с использованием функции IPXOpenSocket.
0
|