- •1 Протоколы xns. 2
- •1.1 Основы технологии
- •1.2 Сетевой уровень
- •2 Протоколipx
- •2.1 Основы технологии
- •2.2 Программирование дляIpx
- •2.2.1 Формат пакета ipx
- •2.2.2 Работа с драйвером ipx/spx
- •Точка входа api драйвера ipx/spx
- •Инициализация сервера и клиента
- •Прием и передача пакетов данных
- •2.2.3 Формат блока ecb
- •2.2.4 Основные функции api драйвера ipx
- •Функции для работы с сокетами
- •IpxOpenSocket
- •IpxCloseSocket
- •Функции для работы с сетевыми адресами
- •IpxGetLocalTaget
- •IpxGetInternetworkAddress
- •Прием и передача пакетов
- •IpxListenForPacket
- •IpxSendPacket
- •IpxRelinquishControl
- •IpxDisconnectFromTaget
- •Функции aes
- •IpxScheduleIpxEvent
- •IpxGetIntervalMarker
- •IpxCancelEvent
- •IpxRelinquishControl
- •3 Протоколspx
- •3.1 Формат пакета spx
- •3.2 Функции spx
- •3.2.1 Инициализация spx spxCheckInstallation
- •3.2.2 Образование канала связи spxListenForConnection
- •SpxEstablishConnection
- •3.2.3. Прием и передача пакетов spxListenForSequencedPacket
- •SpxSendSequencedPacket
- •3.2.4 Разрыв канала связи spxTerminateConnection
- •SpxAbortConnection
- •3.2.5. Проверка состояния канала spxGetConnectionStatus
- •4 Вывод
2.2.4 Основные функции api драйвера ipx
API драйвера протокола IPX состоит из примерно дюжины функций, предназначенных для выполнения операций с сокетами, сетевыми адресами, для приема и передачи пакетов и некоторых других операций. В этом разделе мы кратко рассмотрим состав и назначение основных функций IPX.
Функции для работы с сокетами
В этом разделе мы опишем функции IPXOpenSocket и IPXCloseSocket, предназначенные для получения и освобождения сокетов.
IpxOpenSocket
На входе: |
BX |
= |
00h. |
|
AL |
= |
Тип сокета: 00h - короткоживущий; FFh - долгоживущий. |
|
DX |
= |
Запрашиваемый номер сокета или 0000h, если требуется получить динамический номер сокета. Примечание. Байты номера сокета находятся в перевернутом виде. |
На выходе: |
AL |
= |
Код завершения: 00h - сокет открыт; FFh - этот сокет уже был открыт раньше; FEh - переполнилась таблица сокетов. |
|
DX |
= |
Присвоенный номер сокета. |
Перед началом передачи пакетов программа должна получить свой идентификатор - сокет. Функция IPXOpenSocket как раз и предназначена для получения сокета.
Сокеты являются ограниченным ресурсом, поэтому программы должны заботиться об освобождении сокетов. Когда вы открываете (запрашиваете у IPX) сокет, вы должны указать тип сокета - короткоживущий или долгоживущий.
Короткоживущие сокеты освобождаются (закрываются) автоматически после завершения программы. Долгоживущие сокеты можно закрыть только с помощью специально предназначенной для этого функции IPXCloseSocket. Такие сокеты больше всего подходят для использования резидентными программами или драйверами. Более того, для резидентных программ, работающих с IPX, вы просто обязаны использовать долгоживущие сокеты, так как в противном случае при завершении программы (и при оставлении ее резидентной в памяти) все открытые программой сокеты будут автоматически закрыты. В этом случае после активизации резидентная программа останется без сокетов.
Если вы не используете динамическое распределение сокетов и задаете свой номер сокета, используйте значения в диапазоне от 4000h до 8000h или получите персональный зарегистрированный сокет у фирмы Novell.
По умолчанию при загрузке оболочки рабочей станции вам доступно максимально 20 сокетов. При соответствующей настройке сетевой оболочки вы можете увеличить это значение до 150.
IpxCloseSocket
На входе: |
BX |
= |
01h. |
|
DX |
= |
Номер закрываемого сокета. |
На выходе: |
|
|
Регистры не используются. |
Функция закрывает заданный в регистре DX сокет, короткоживущий или долгоживущий.
Если с закрываемым сокетом связаны ECB, находящиеся в обработке (в состоянии ожидания завершения приема или передачи), указанные ECB освобождаются, а ожидающие завершения операции отменяются. При этом в поле InUse для таких ECB проставляется нулевое значение, а в поле CCode - значение FCh, означающее, что операция была отменена.
Для отмененных ECB программы ESR не вызываются.
Функцию IPXCloseSocket нельзя вызывать из программы ESR.