ВУЗ:
Составители:
Рубрика:
10
или драйверами. Более того, для резидентных программ, работающих с IPX, вы
просто обязаны использовать долгоживущие сокеты, так как в противном слу-
чае при завершении программы (и при оставлении ее резидентной в памяти) все
открытые программой сокеты будут автоматически закрыты. В этом случае по-
сле активизации резидентная программа останется без сокетов.
IPXOpenSocket – открытие
сокета.
При вызове: BX - 00h. AL - Тип соке-
та: 00h - короткоживущий; FFh - долгоживущий. DX-Запрашиваемый номер со-
кета или 0000h, если требуется получить динамический номер сокета. Байты
номера сокета находятся в обратном порядке.
После завершения: AL-Код за-
вершения: 00h - сокет открыт; FFh - этот сокет уже был открыт раньше; FEh -
переполнилась таблица сокетов. DX- присвоенный номер сокета.
IPXCloseSocket - функция закрывает заданный в регистре DX сокет, ко-
роткоживущий или долгоживущий:
При вызове: BX - 01h. DX - номер закры-
ваемого сокета.
После завершения: Регистры не используются.
8.2. Работа с сетевыми адресами
Для работы с полным адресом можно использовать такую структуру:
struct NET_ADDRESS {
unsigned char Network[4];
unsigned char Node[6];
unsigned char Socket[2];
Так как станция-приемник может находиться в другой сети и прежде чем
достигнуть цели, пакет может пройти один или несколько мостов. Поле непо-
средственного адреса ImmAddress блока ECB должно содержать либо адрес
станции назначения (если передача происходит в пределах одной сети), либо
адрес моста (если пакет предназначен для рабочей станции, расположенной в
другой
сети)., функция IPXGetLocalTaget.
IPXGetLocalTaget вычисляет непосредственный адрес, помещаемого в
поле ImmAddress блока ECB перед передачей пакета, т. е. адрес той станции в
данной сети, которая получит передаваемый пакет, используя указанный в бу-
фере размером 12 байт полный сетевой адрес, состоящий из номера сети, адреса
станции в сети и сокета приложения.
При вызове: BX - 02h. ES:SI - указатель на
буфер длиной 12 байт, содержащий полный сетевой адрес станции, на которую
будет послан пакет. ES:DI - указатель на буфер длиной 6 байт, в который будет
записан непосредственный адрес, т. е. адрес той станции, которой будет пере-
дан пакет. Это может быть адрес моста.
После завершения: AL - код заверше-
ния: 00h - непосредственный адрес был успешно вычислен; FAh - непосредст-
венный адрес вычислить невозможно, так как к указанной станции нет ни одно-
го пути доступа по сети. CX - время пересылки пакета до станции назначения
(только если AL равен нулю) в тиках системного таймера.
IPXGetInternetworkAddress определяет свой сетевой адрес. В буфер не
записывается сокет
, потому что считается, что сокет программа знает, так как
она его открывала.
При вызове: BX - 09h. ES:SI - Указатель на буфер длиной 10