Локальные сети персональных компьютеров. Использование протоколов IPX, SPX, NETBIOS
© Александр Фролов, Григорий Фролов
Том 4, М.: Диалог-МИФИ, 1993, 160 стр.
|
5. Приложение 1. ФУНКЦИИ IPX
5.1. Функции для работы с сокетами
5.2. Функции для работы с сетевыми
адресами
5.3. Прием и передача пакетов
5.4. Другие функции IPX и AES
IPXOpenSocket - открыть сокет
На входе: |
BX |
= |
00h. |
|
AL |
= |
Тип сокета:
00h - короткоживущий;
FFh - долгоживущий. |
|
DX |
= |
Запрашиваемый номер сокета или 0000h, если
требуется получить динамический номер сокета.
Примечание. Байты номера сокета находятся в
перевернутом виде. |
На выходе: |
AL |
= |
Код завершения:
00h - сокет открыт;
FFh - этот сокет уже был открыт раньше;
FEh - переполнилась таблица сокетов. |
|
DX |
= |
Присвоенный номер сокета. |
IPXCloseSocket - закрыть сокет
На входе: |
BX |
= |
01h. |
|
DX |
= |
Номер закрываемого сокета. |
На выходе: |
|
|
Регистры не используются. |
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. |
На выходе: |
|
|
Регистры не используются. |
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. |
На выходе: |
|
|
Регистры не используются. |
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
На входе: |
BX |
= |
0Ah. |
На выходе: |
|
|
Регистры не используются. |
|