15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту

Библиотека Системного Программиста. Том 8
Локальные сети персональных компьютеров. Использование протоколов IPX, SPX, NETBIOS

5. Приложение 1. ФУНКЦИИ IPX

5.1. Функции для работы с сокетами

5.2. Функции для работы с сетевыми адресами

5.3. Прием и передача пакетов

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

5.1. Функции для работы с сокетами

IPXOpenSocket - открыть сокет

На входе:BX= 00h.
AL= Тип сокета:
00h - короткоживущий;
FFh - долгоживущий.
DX= Запрашиваемый номер сокета или 0000h, если требуется получить динамический номер сокета.
Примечание. Байты номера сокета находятся в перевернутом виде.
На выходе:AL= Код завершения:
00h - сокет открыт;
FFh - этот сокет уже был открыт раньше;
FEh - переполнилась таблица сокетов.
DX= Присвоенный номер сокета.

IPXCloseSocket - закрыть сокет

На входе:BX= 01h.
DX= Номер закрываемого сокета.
На выходе: Регистры не используются.

5.2. Функции для работы с сетевыми адресами

IPXGetLocalTaget - получить непосредственный адрес

На входе:BX= 02h.
ES:SI= Указатель на буфер длиной 12 байт, содержащий полный сетевой адрес станции, на которую будет послан пакет.
ES:DI= Указатель на буфер длиной 6 байт, в который будет запи-сан непосредственный адрес, т. е. адрес той станции, которой будет передан пакет. Это может быть адрес моста.
На выходе:AL= Код завершения:
00h - непосредственный адрес был успешно вычислен;
FAh - непосредственный адрес вычислить невозможно, так как к указанной станции нет ни одного пути доступа по сети.
CX= Время пересылки пакета до станции назначения (только если AL равен 0) в тиках системного таймера. Тики таймера следуют с периодом примерно 1/18 секунды.

IPXGetInternetworkAddress - получить собственный адрес

На входе:BX= 09h.
ES:DI= Указатель на буфер длиной 10 байт, в который будет записан адрес станции, на которой работает данная программа. Адрес состоит из номера сети Network и адреса станции в сети Node.
На выходе: Регистры не используются.

5.3. Прием и передача пакетов

IPXListenForPacket - принять IPX-пакет

На входе:BX= 04h.
ES:DI= Указатель на заполненный блок ECB. Необходимо заполнить поля:
ESRAddress;
Socket;
FragmentCnt;
указатели на буферы фрагментов Address;
размеры фрагментов Size.
На выходе: Регистры не используются.

IPXSendPacket - передать IPX-пакет

На входе:BX= 03h.
ES:DI= Указатель на заполненный блок ECB. Необходимо заполнить поля:
ESRAddress;
Socket;
ImmAddress;
FragmentCnt;
указатели на буферы фрагментов Address;
размеры фрагментов Size.В заголовке пакета IPX необходимо заполнить поля:
PacketType;
DestNetwork;
DestNode;
DestSocket.
На выходе: Регистры не используются.

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

IPXDisconnectFromTaget - отключиться от партнера

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

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

IPXSceduleIPXEvent - отложить событие

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

IPXGetIntervalMarker - получить интервальный маркер

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

IPXCancelEvent - отменить событие

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

IPXRelinquishControl - выделить время драйверу IPX

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