ВУЗ:
Составители:
Рубрика:
9
представлять собой непрерывный массив. Однако часто хранятся отдельно
данные и заголовок пакета. Механизм фрагментации позволяет избежать
пересылок данных или непроизводительных потерь памяти. Можно указать
отдельные буферы для приема данных и для заголовка пакета. Если сами
принимаемые данные имеют какую-либо структуру, можно распределить
отдельные блоки по соответствующим буферам. Значение, записанное в
поле
FragmentCnt, не должно быть равно нулю. Если в этом поле записано значение
1, весь пакет вместе с заголовком записывается в один общий буфер.
Сразу вслед за полем FragmentCnt располагаются дескрипторы
фрагментов, состоящие из указателя в формате [сегмент:смещение] на
фрагмент Address и поля размера фрагмента Size.
Если программе надо разбить принятый пакет на
несколько частей, она
должна установить в поле FragmentCnt значение, равное количеству требуемых
фрагментов. Затем для каждого фрагмента необходимо создать дескриптор, в
котором указать адрес буфера и размер фрагмента. Аналогичные действия
выполняются и при сборке пакета перед передачей из нескольких фрагментов.
При этом самый первый фрагмент не должен быть короче 30 байт, так как
там
должен находиться заголовок пакета IPX.
8. Основные функции
Основными функциями IPX являются следующие
IPXOpenSocket 0x00
IPXCloseSocket 0x01
IPXGetLocalTarget 0x02
IPXSendPacket 0x03
IPXListenForPacket 0x04
IPXSheduleEvent 0x05
IPXCancelEvent 0x06
IPXGetIntervalMaker 0x08
IPXGetInternetworkAddress 0x09
IPXRelinquishControl 0x0A
IPXDisconnectFromTarget 0x0B
Для выполнения функций можно использовать регистры общего назначе-
ния процессора, при этом в ВХ записывается номер функции.
8.1. Работа с сокетами
Перед началом передачи пакетов программа должна получить свой иден-
тификатор - сокет. Функция IPXOpenSocket предназначена для получения соке-
та. Сокеты являются ограниченным ресурсом, поэтому программы должны за-
ботиться об освобождении сокетов. Когда
вы открываете (запрашиваете у IPX)
сокет, вы должны указать тип сокета - короткоживущий или долгоживущий.
Короткоживущие сокеты освобождаются (закрываются) автоматически после
завершения программы. Долгоживущие сокеты можно закрыть только с помо-
щью специально предназначенной для этого функции IPXCloseSocket. Такие
сокеты больше всего подходят для использования резидентными программами
Страницы
- « первая
- ‹ предыдущая
- …
- 9
- 10
- 11
- 12
- 13
- …
- следующая ›
- последняя »