Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
А4_Методичка.doc
Скачиваний:
0
Добавлен:
01.01.2020
Размер:
3.79 Mб
Скачать

4.2.4 Мережеві функції ipx.

Основні функції API драйвера IPX. API драйвера протоколу IPX складається з 12 функцій, призначених для виконання операцій з сокетами, мережевими адресами, для прийому і передачі пакетів і деяких інших операцій. Коротко розглянемо склад та призначення основних функцій IPX.

Функції для роботи з сонетами: IPXOpenSocket і IPXCloseSocket, які призначені для отримання і звільнення сокетів.

PXOpenSocket. На вході: BX= 00h. AL=Тип сокета: 00h - короткоживучий; FFh - долгоживучий. DX= Запитуваний номер сокета / 0000h, якщо потрібно отримати динамічний номер сокета. Зазначимо, що байти номера сокета знаходяться в перевернутому вигляді.

На виході: AL= Код завершення: 00h - сокет відкритий; FFh – цей сонет уже був відкритий раніше; FEh – переповнилася таблиця сокетів. DX=присвоєний нопер сокета.

Функції для роботи з мережевими адресами.

IPXGetLocalTaget. На вході: BX = 02h. ES:SI = Покажчик на буфер довжиною 12 байт, що містить повний мережеву адресу РС, на яку буде надіслано пакет. ES:DI = Покажчик на буфер довжиною 6 байт, в який буде записаний безпосередній адресу, тобто адресу тієї РС, якою буде передано пакет. Це може бути адреса мосту.

На виході: AL = Код завершення: 00h - безпосередній адреса була успішно обчислений;FAh - безпосередній адресу обчислити немож-но, так як до зазначеної РС немає жодного шляху доступу по КМ; CX - час пересилання пакету до РС призначення (тільки якщо AL = 0) в тиках системного таймера (один тік ≈ 1 / 18 с).

Перед початком передачі пакетів програма повинна отримати свій ідентифікатор - сокет. Функція IPXOpenSocket якраз і призначена для отримання сокета.

Сокети є обмеженим ресурсом, тому програми повинні піклуватися про звільнення сокетів. Коли відкривається (запитуєте у IPX) сокет, то вказується тип сокета: короткоживучий, довгоживучий. Приклад використання сокета представлений у ПП. 19 на CD.

Короткоживучі сокети звільняються / закриваються автоматично після завершення програми. Довгоживучі сокети можна закрити тільки за допомогою функції IPXCloseSocket. Такі сокети найбільше підходять для резидентних програм / драйверів. Більше того, для резидентних програм, які працюють з IPX, необхідно використовувати довгоживучі сокети, тому що в противному випадку при завершенні програми (і при залишенні її резидентної в ОП) всі відкриті програмою сокети будуть автоматично закриті, і у випадку її активізації резидентна програма залишиться без сокетів.

Якщо не використовується динамічний розподіл сокетів то задається номер сонета зі значенням в діапазоні від 4000h до 8000h. За замовчуванням при завантаженні оболонки РС вам доступно максимально 20 сокетів. При відповідній настройці мережевий оболонки можна збільшити це значення до 150.

IPXCloseSocket. Функція закриває заданий в регістрі DX сокет, короткоживучий або довгоживучий. На вході: BX= 01h. DX = Номер закривающого сокета. На виході: Регістри не використовуються.

Якщо з закриваються сокетом пов'язані ECB, що знаходяться в обробці (у стані очікування завершення прийому / передачі), зазначені ECB звільняються, а очікують завершення операції скасовуються. При цьому в полі InUse для таких ECB проставляється нульове значення, а в полі CCode - значення FCh, що означає, що операція була скасована.

Для скасованих ECB програми ESR не викликаються.

Функцію IPXCloseSocket не можна викликати з програми ESR.