Скачиваний:
56
Добавлен:
01.05.2014
Размер:
348.67 Кб
Скачать

SpxSendSequencedPacket

На входе:

BX

=

16h.

ES:SI

=

Указатель на блок ECB

DX

=

Номер канала связи.

На выходе:

---

Регистры не используются.

Функция ставит блок ECB, адрес которого указан в регистрах ES:SI, в очередь на передачу, после чего немедленно возвращает управление вызвавшей программе.

Перед вызовом функции программа должна заполнить поле ESRAddress, счетчик фрагментов и дескрипторы фрагментов блока ECB, а также бит End-Of-Message в поле ConnControl и поле DataStreamType в заголовке передаваемого пакета. Разумеется, заголовок должен иметь длину 42 байта.

В регистр DX необходимо загрузить номер канала, используемый партнером.

В отличие от средств передачи пакета протокола IPX успешное завершение передачи пакета, инициированной функцией SPXSendSequencedPacket, гарантирует доставку пакета партнеру. Если партнер не успевает принимать передаваемые пакеты, они ставятся в очередь на передачу, чем обеспечивается правильная последовательность доставки пакетов.

После завершения передачи пакета поле InUse блока ECB имеет нулевое значение. Если определена программа ESR, она вызывается. В поле CCode находится код завершения:

Для отмены передачи пакета нельзя использовать функцию IPXCancelEvent. Вместо нее необходимо использовать функцию SPXAbortConnection.

3.2.4 Разрыв канала связи spxTerminateConnection

На входе:

BX

=

13h.

ES:SI

=

Указатель на блок ECB.

DX

=

Номер канала связи.

На выходе:

Регистры не используются.

Функция посылает удаленному партнеру пакет, который состоит из одного заголовка. В поле DataStreamType этого заголовка находится значение FEh, которое говорит партнеру о том, что необходимо закрыть канал. Сразу после вызова функция возвращает управление вызывавшей ее программе.

Перед вызовом функции программа должна заполнить поле ESRAddress, счетчик фрагментов (в пакете должен быть один фрагмент размером 42 байта) и дескриптор фрагмента блока ECB.

В регистр DX необходимо загрузить номер канала, используемый партнером.

После завершения процесса закрытия канала в поле InUse блока ECB проставляется нулевое значение и вызывается программа ESR (если она была задана). В поле CCode проставляется код завершения:

После закрытия канала освобождается место в таблице номеров каналов. Программа может открывать новые каналы.

Заметим, что для отмены ожидания завершения процесса закрытия канала необходимо использовать функцию SPXAbortConnection, а не IPXCancelEvent.

SpxAbortConnection

На входе:

BX

14h.

 

DX

Номер канала связи.

На выходе:

Регистры не используются.

Функция разрывает канал связи без "согласования" с партнером. Данная функция должна использоваться только в катастрофических случаях, когда невозможно выполнить нормальную процедуру закрытия канала.

После вызова этой функции во всех ECB, относящихся к данному каналу в поле CCode проставляется значение EDh.