Телекоммуникационные технологии. Том 1



         

Winsock (для UNIX, Windows- и -NT) - часть 18


Этот код посылается клиентом серверу с помощью сегмента SYN. Для реализации режима соединения прикладная программа на одном конце канала устанавливается в режим пассивного доступа ("passive open"), а операционная система на другом конце ставится в режим активного доступа ("active open"). Протокол TCP предполагает реализацию 11 состояний (ESTABLISHED, CLOSED, LISTEN, SYN_SENT, SYN_RCVD и т.д.), переход между которыми строго регламентирован (смотри раздел ).

При написании диагностических и управляющих программ под Windows 95 или NT можно использовать простые соединители (Sock_Raw) или библиотеку ICMP.DLL (эта динамическая библиотека не является частью Win32 API). Библиотека ICMP.DLL содержит в частности процедуру ICMPSendEcho, которая посылает запросы эхо по указанному адресу и возвращает отклик в пределах указанного временного интервала. В качестве аргументов запрос ICMPSendEcho использует ICMP-дескриптор, который получается в результате запроса IcmpCreateFile.

HANDLE WINAPI IcmpCreateFile(VOID);
/* Оператор создает ICMP-дескриптор; при ошибке возвращает INVALID_HANDLE_VALUE */
BOOL WINAPI IcmpCloseHandle(HANDLE IcmpHandle);
/* Оператор ликвидирует ICMP-дескриптор; при возникновении ошибки возвращает значение FALSE */

Обращение к процедуре посылки ICMP запроса эхо имеет формат:
DWORD WINAPI IcmpSendEcho(
HANDLE IcmpHandle,
/* дескриптор, полученный в результате запроса IcmpCreateFile */

u_long DestAddress,/* IP адрес точки зондирования */
LPVOID RequestData,
/* указатель на буфер, где лежат данные, подлежащие посылке */
WORD RequestSize,/* длина этого буфера */
LPIPINFO RequestOptns,/* указатель на структуру ICMP-опций */
LPVOID ReplyBuffer,
/* указатель на буфер для приема пакета-отклика */
DWORD ReplySize,/* размер буфера для пакета-отклика */
DWORD Timeout/* время ожидания отклика в миллисекундах */
);
struct icmp_echo_reply {/* Структура ICMP-отклика */
u_long Address;/* адрес отправителя */
u_long Status;/* код IP-статуса */
u_long RTTime;/* RTT в миллисекундах */
u_short DataSize;/* длина пакета-отклика */
u_short Reserved;/* зарезервировано на будущее */
void FAR *Data;/* буфер отклика */
struct ip_option_information Options;/* опции отклика */
}; ICMPECHO, *PICMPECHO, FAR *LPICMPECHO;
struct ip_option_information {/* Структура опций протокола ICMP */
u_char TTL;/* Time To Live (используется процедурой traceroute) */
u_char Tos;/* Type Of Service (тип сервиса; обычно 0) */
u_char Flags;/* Флаги IP-заголовка (обычно 0) */
u_char OptionsSize;/* Размер буфера опций (обычно 0, max=40) */
u_char FAR *OptionsData;/* Буфер опций */
} IPINFO, *PIPINFO, FAR *LPIPINFO;




Содержание  Назад  Вперед