Протокол IPX. Шоберг А.Г. - 9 стр.

UptoLike

Составители: 

7
Структура ЕСВ на языке С может быть описана следующим образом:
struct ECB {
void far *Link;
void far (*ESRAddress)(void); /* s r t */
unsigned char InUse;
unsigned char CCode;
unsigned int Socket; /* s r старший-младший */
unsigned char IPXWorkspace[4];
unsigned char DriverWorkspace[12];
unsigned char ImmAddress[6]; /* s старший-младший */
unsigned int FragmentCnt; /* s r */
struct {
void far *Address;
unsigned int Size;
} Packet[2];
};
Поле Link предназначено для организации списков, состоящих из блоков
ECB. Драйвер IPX использует это поле для объединения переданных ему
блоков ECB в списки, записывая в него полный адрес в формат
[сегмент:смещение]. После того, как IPX выполнит выданную ему команду и
закончит все операции над блоком ECB, программа может распоряжаться
полем Link по своему усмотрению. В
частности, она может использовать это
поле для организации списков или очередей свободных или готовых для чтения
блоков ECB.
Поле ESRAddress содержит полный адрес программного модуля (в
формате [сегмент:смещение]), который получает управление при завершении
процесса чтения или передачи пакета IPX. Этот модуль называется программой
обслуживания события ESR (Event Service Routine). Если программа не
использует ESR, она должна
записать в поле ESRAddress нулевое значение. В
этом случае о завершении выполнения операции чтения или передачи можно
узнать по изменению содержимого поля InUse.
Поле InUse является индикатором завершения операции приема или
передачи пакета. Перед тем как вызвать функцию IPX, программа записывает в
поле InUse нулевое значение. Пока операция передачи данных, связанная с
данными ECB, не завершилась
, поле InUse содержит ненулевые значения:
FFh - ECB используется для передачи пакета данных;
FEh - ECB используется для приема пакета данных, предназначенного
программе с определенным сокетом;
FDh - ECB используется функциями асинхронного управления
событиями AES (Asynchronous Event Sheduler), ECB находится в состоянии
ожидания истечения заданного временного интервала;
FBh - пакет данных принят или передан, но ECB находится во внутренней
очереди IPX в ожидании завершения обработки.
Программа может постоянно опрашивать поле InUse, ожидая завершения
процесса передачи или приема данных. Как только в этом поле окажется