Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Operatsionnye_sistemy.doc
Скачиваний:
153
Добавлен:
12.03.2015
Размер:
4.94 Mб
Скачать

§ 8.3. Обмен информацией с использованием сокетов

8.3.1. Общие положения. Виды сетевых протоколов

Для разработки программного обеспечения для сетевых технологий необходимо

знать основные концепции и терминологию, используемую при работе в этой среде. По-

этому вначале рассмотрим некоторые общие вопросы. Большинство начинающих поль-

зователей Internet быстро привыкают к тому факту, что у них есть свой адрес электрон-

ной почты и IP-адрес. Настройка компьютера для работы в сетях TCP/IP обычно

189

подразумевает указание IP-адресов для доменного имени сервера и сетевого шлюза, а

также ввод серверных имен POP и SMTP. IP-адреса задаются в виде четырехразрядной

системы обозначений, где каждый байт 4-байтового адреса представлен десятичным

числом и отделен точкой от соседнего байта. Такая система обозначений принята для

упрощения восприятия IP-адресов человеком. Компьютеры и другое аппаратное обеспе-

чение Internet всегда воспринимают 4-байтовые (32-разрядные) значения непосредст-

венно.

Поскольку каждый компьютер в Internet имеет собственный IP-адрес (по крайней

мере, пока он подключен к сети), а число таких компьютеров увеличивается неудержимо

быстрыми темпами, ведутся работы по внедрению новой схемы адресации. Однако ре-

шение возникающих при этом проблем связано с определенными трудностями, поэтому

в ближайшее время мы будем пользоваться в своих программах 32-разрядными IP-

адресами. Рассмотрим основные Internet-протоколы.

TCP/IP - это набор связанных протоколов, соответствующих разным уровням мо-

дели OSI. (Например, на нижних уровнях расположены основные пакетные протоколы

TCP и UDP, обеспечивающие транспортировку данных методом последовательной дву-

направленной передачи или методом однонаправленной передачи без установления со-

единения.)

Протокол IP (Internet Protocol) выполняет в Internet роль "службы доставки",

обеспечивающей функционирование других протоколов. IP использует дейтаграммы,

передаваемые без установления соединения, поэтому IP-пакеты часто называют IР-

дейтаграммами.

Протокол TCP (Transmission Control Protocol) представляет собой последователь-

ный двунаправленный протокол, предусматривающий установление соединения и ис-

пользующий байтовые потоки данных. Он считается вполне надежным, поскольку при

приеме каждого пакета данных выполняется проверка контрольной суммы и произво-

дится запрос на повторную передачу пакета в случае ошибки.

Протокол UDP (User Datagram Protocol), в отличие от TCP, считается "ненадеж-

ным", так как осуществляет передачу пакетов данных без установления соединения и,

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

сравним с радиосвязью - вы можете быть уверены в том, что сигнал передан, но не мо-

жете проверить, принят ли он.

Два описанных подхода взаимно дополняют друг друга. Передача данных без ус-

тановления соединения осуществляется быстрее, поскольку правильность операций пе-

редачи и приема не проверятся. Протокол TCP требует дополнительных расходов, но

обеспечивает корректную передачу данных по месту назначения и устраняет ошибки,

происходящие в каких-либо звеньях аппаратного обеспечения сети (в кабелях, в комму-

тирующих устройствах и т.д.).

Высший уровень стека TCP/IP содержит протоколы, предназначенные для более

специализированных целей. Эти протоколы выполняют роль различных сетевых серви-

сов и используются для передачи электронной почты, файлов, документов, Web-страниц

и т.д. Перечислим протоколы, которые входят в данную группу.

SMTP (Simple Mail Transfer Protocol) - Используется для отправки электронной почты

на сервер.

РОРЗ (Post Office Protocol 3)- Предназначен для чтения электронной почты с сервера.

FTP (File Transfer Protocol)- Широко применяется для передачи файлов.

HTTP (Hypertext Transfer Protocol) - Используется в качестве стандартного Web-

протокола.

Telnet Предназначен для удаленной регистрации и интерактивного доступа к удаленным

серверам.

190

В то время как низкоуровневые транспортные протоколы осуществляют передачу

информации с помощью довольно сложных структур и пакетов, протоколы высшего

уровня обычно применяют методику, которая более привычна с точки зрения человека и

удобна для программистов. Эти протоколы имеют ряд общих характеристик [12]:

• устанавливают диалог между клиентом и сервером посредством двунаправленного

гнезда;

• применяют числовые коды ответов;

• их пакеты начинаются с распознаваемой командной строки, состоящей из четырех

символов.

Большинство программ, предназначенных для работы с Internet, используют пара-

дигму "гнезд" (sockets). В старые добрые времена, когда TCP/IP был интегрирован в

операционную систему Unix, появился набор функций, получивший название Берклиев-

ского стандарта гнезд (Berkeley sockets standard). Эти функции позволяют создать гнез-

до, прослушать соединение (на стороне сервера), связать гнездо с заданными сервером и

номером порта (на стороне клиента), а также передать и принять информацию через

гнездо. Таким образом, при взаимодействии клиент - сервер в сети каждого участника

взаимодействия можно рассматривать как конечную точку, которая и называется socket

(или "гнездо").

Гнездо играет роль, аналогичную выполняемой дескриптором файла, и в некото-

рых версиях Unix может использоваться непосредственно функциями ввода/вывода.

Имеется два типа гнезд, соответствующих протоколам, которые подразумевают или от-

рицают потребность в установлении соединения [1, 12]:

• TCP-гнезда - соединение между гнездом и сервером устанавливается;

• UDP-гнезда - для передачи данных необходимо только указать конечный пункт на-

значения (номер порта по заданному IP-адресу).

Принцип взаимодействия сервера и клиентов следующий. На сервере программа

взаимодействия с клиентами подключается к адресу IP, создает гнездо и находится в

режиме ожидания подключения. Программа клиент тоже создает гнездо и пытается под-

ключиться к гнезду сервера. Сервер при обнаружении попытки подключения создает

новое гнездо и использует его для взаимодействия с клиентом. Первое созданное на сер-

вере гнездо остается в режиме ожидания подключения следующего клиента. Таким спо-

собом производится взаимодействие сервера и многими клиентами.

В начале 90-х годов консорциумом частных лиц и компаний была предложена

версия функций работы с гнездами для Windows, которая стала называться WinSock. Та-

ким образом, WinSock или Windows socket - это интерфейс API-функций, созданный для

реализации приложений в сети на основе протокола TCP/IP. Обычно эти функции опи-

сываются в библиотеке WSOCK32.DLL.

Интерфейс WinSock несколько отличается от Берклеевского стандарта гнезд, так

как 16-разрядные версии Windows, для которых он первоначально создавался, в отличие

от Unix, не были полноценно многозадачными операционными системами. Необходимо

было предусмотреть асинхронный режим работы функций WinSock для исключения

возможности блокировки системы в момент ожидания ответа. В UNIX можно было про-

сто создать отдельные потоки для приложений, работающих с гнездами, чтобы обеспе-

чить их независимость. Современные версии Windows полноценно многозадачны, по-

этому в них можно использовать обычный Берклеевский стандарт гнезд.

В результате вышесказанного спецификация WinSock разделяет функции интер-

фейса на три типа [1]:

1. Расширения Windows для функций Беркли (Асинхронные функции, которые не

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

извещать Windows-приложения о своем завершении, отправляя специальное

сообщение указанному окну. При этом приложение может вызвать функцию, про-

191

должить другие операции, а затем проверить код завершения функции в очереди

сообщений.);

2. Функции Беркли (Синхронные функции, производящие блокировку интерфейса в

момент своей работы, есть при работе такой функции нельзя выполнять другие

функции WinSock);

3. Информационные функции (получение информации о наименовании доменов,

службах, протоколах Internet).

Существует две версии WinSock

• WinSock 1.1 - поддержка только TCP/IP;

• WinSock 2.0 - поддержка дополнительного программного обеспечения

Интерфейс Winsock 2 имеет следующие преимущества [12]:

• поддерживает различные протоколы;

• позволяет создать быстрый программный код, адаптированный к конкретной конфи-

гурации аппаратного обеспечения;

• является единственным решением при создании серверных программ, для которых

существенными характеристиками (более важными, чем, скажем, время разработки)

являются быстродействие и производительность;

• обеспечивает наилучшую среду для разработки кросс-платформенных программ.

Текущая версия Winsock 2 поддерживает большинство функции, заимствованных

из предыдущих версий, а также содержит несколько функций, оптимизирующих много-

протокольную поддержку. Хотя интерфейс Winsock чаще всего используется с протоко-

лами TCP/IP, он также поддерживает связь посредством гнезд по некоторым другим

протоколам, в том числе IPX, SPX, Banyan VINES и AppleTalk. В этой лекции будет рас-

смотрено только функционирование TCP/IP, однако имейте в виду, что приложения, ра-

ботающие с гнездами, несложно модифицировать для использования других протоко-

лов. Интерфейс Winsock содержит как синхронные, так и асинхронные функции для

выполнения операций с гнездами. Кроме того, в нем имеется несколько функций преоб-

разования данных и просмотра баз данных. Функции интерфейса Winsock2 описаны в

библиотеке ws2_32.dll.

8.3.2. API-функции для работы с сокетами

Список и описание функций, предназначенных для работы с гнездами, приведен в

табл.8.1. Вместе взятые они представляют собой традиционный набор синхронных

функций (функций Беркли).

Таблица 8.1

accept

Функция

1

Описание

2

Регистрирует подключение к заданному гнезду

AcceptEx

bind

closesocket

connect

GetAcceptExSock-

addrs

ioctlsocket

1

Регистрирует новое подключение, возвращает локальный и уда-

ленный адрес, а также первый блок данных, отправленный кли-

ентом

Назначает гнезду локальный адрес

Закрывает гнездо

Соединяет гнездо с заданным одноранговым узлом

Анализирует данные, переданные функцией AcceptEx, выделяет

локальный и удаленный адреса, а также первый блок данных,

полученных при соединении

Читает или устанавливает параметры режима работы гнезда

Окончание табл. 8.1

2

192

listen

recv

recvfrom

select

send

sendto

setsockopt

shutdown

socket

Переводит заданное гнездо в режим прослушивания

Читает данные из заданного гнезда

Читает дейтаграмму и исходный адрес

Определяет статус одного или нескольких гнезд

Посылает данные в заданное (подключенное) гнездо

Посылает данные по адресу назначения

Устанавливает параметры гнезда

Запрещает передачу и/или прием данных через указанное гнездо

Создает гнездо, связанное с заданным провайдером транспорт-

ных услуг

Рассмотрим параметры основных функций. Для создания гнезда используется сис-

темный вызов socket() [1, 12].

s = socket(domain, type, protocol);

где domain - тип протокола. Для протокола IP используется параметр AF_INET (Internet

протоколы);

type- тип подключения. Используется три возможных типа:

Stream socket (SOCK_STREAM) - обеспечивает последовательный, надежный, ори-

ентированный на установление двусторонней связи поток байтов.

Datagram socket ( SOCK_DGRAM) - поддерживает двусторонний поток данных. Не

гарантируется, что этот поток будет последовательным, надежным, и что данные не

будут дублироваться. Важной характеристикой данного гнезда является то, что гра-

ницы записи данных предопределены.

Raw socket (SOCK_RAW) - обеспечивает возможность пользовательского доступа к

низлежащим коммуникационным протоколам, поддерживающим сокет-абстракции.

Такие гнезда обычно являются датаграм-ориентированными.

protocol - необязательный параметр, при использовании AF_INET принимает значение

0.

Функция socket создает конечную точку для коммуникаций и возвращает файло-

вый дескриптор, ссылающийся на гнездо, или -1 в случае ошибки. Данный дескриптор

используется в дальнейшем для установления связи.

Для создания гнезда типа stream с протоколом TCP, обеспечивающим коммуника-

ционную поддержку, вызов функции socket должен быть следующим:

s = socket(AF_INET, SOCK_STREAM, 0);

Гнездо создается без имени. Пока с гнездом не будет связано имя, удаленные про-

цессы не имеют возможности ссылаться на него и, следовательно, на данном гнезде не

может быть получено никаких сообщений. Коммуникационные процессы используют

для данных целей ассоциации. В Internet домене ассоциация складывается из локального

и удаленного адреса и из локального и удаленного порта. В большинстве доменов ассо-

циация должна быть уникальной.

В Internet домене связывание гнезда и имени может быть весьма сложным, но, к

счастью, обычно нет необходимости специально привязывать адрес и номер порта к

гнезду, так как функции connect и send автоматически свяжут данный socket с подходя-

щим адресом, если это не было сделано до их вызова.

Для связывания гнезда с адресом и номером порта используют системный вызов

bind:

193

bind(s, sockaddr, sockaddrlen);

где s - дескриптор узла, возвращаемый функцией socket;

sockaddr- структура, которая интерпретируется поддерживаемым протоколом (IP - ад-

рес, № порта и т.д.);

sockaddrlen- размер параметра sockaddr в байтах.

Рассмотрим структуру sockaddr более подробно:

struct sockaddr

{

u_short sa_family;

char sa_data[14];

};

Первый элемент структуры обозначает протокол, второй - специфическое для про-

токола значение. Например версия данной структуры для Internet (sockaddr_in) будет

иметь следующий вид:

struct sockaddr_in

{

short sin_family; //AF_INET

u_short sin_port;

struct sin_addr; //4-х байтовый IP-адрес

char sin_zero[8];

};

Элемент sin_addr представляет собой четырехбайтовый IP-адрес (например 127.0.0.1).

Для преобразования данной строки в требуемую форму используется функция

inet_addr(), которая будет рассмотрена далее.

Для установления связи со стороны клиента используется функция connect:

error = connect(s, serveraddr, serveraddrlen);

которая инициирует установление связи на узле, используя его дескриптор s и информа-

цию из структуры serveraddr, которая содержит адрес сервера и номер порта на который

надо установить связь. Если гнездо не было связано с адресом, connect автоматически

вызовет системную функцию bind.

Функция connect возвращает 0, если вызов прошел успешно. Возвращенная вели-

чина -1 указывает на то, что в процессе установления связи произошла некая ошибка. В

случае успешного вызова функции процесс может работать с дескриптором узла, ис-

пользуя функции read и write, и закрывать канал используя функцию close.

Со стороны сервера процесс установления связи сложнее. Когда сервер желает

предложить один из своих сервисов, он связывает узел с общеизвестным адресом, ассо-

циирующимся с данным сервисом, и пассивно слушает этот узел. Для этих целей ис-

пользуется системный вызов listen:

error = listen(s, qlength);

где s это дескриптор узла, а qlength это максимальное количество запросов на установ-

ление связи, которые могут стоять в очереди, ожидая обработки сервером; это количест-

во может быть ограничено особенностями системы.

194

Когда сервер получает запрос от клиента и принимает решение об установлении

связи, он создает новый узел и связывает его с ассоциацией, эквивалентной "узлу в ре-

жиме ожидания". Для Internet домена это означает тот же самый номер порта. Для этой

цели используется системный вызов accept:

newsock = accept(s, clientaddr, clientaddrlen);

Узел, ассоциированный клиентом, и узел, который был возвращен функцией

accept, используются для установления связи между сервером и клиентом.

Когда связь установлена, с помощью различных функций может начаться процесс

передачи данных. При наличии связи, пользователь может посылать и получать сообще-

ния с помощью функций read и write:

write(s, buf, sizeof(buf));

read(s, buf, sizeof(buf));

Вызовы send и recv практически идентичны read и write, за исключением того, что

добавляется аргумент флагов.

send(s, buf, sizeof(buf), flags);

recv(s, buf, sizeof(buf), flags);

Могут быть указаны один или более флагов с помощью ненулевых значений, таких, как

следующие:

MSG_OOB - Посылать/получать данные, характерные для гнезд типа stream.

MSG_PEEK - Просматривать данные без чтения. В этом случае данные посылаются

пользователю, но сами помечаются как "непрочитанные". Следующий read или recv

вызванный на данном узле вернет прочитанные в прошлый раз данные.

MSG_DONTROUTE - посылать данные без маршрутизации пакетов. (Используется

только процессами, управляющими таблицами маршрутизации.)

Закрытие узла производится следующим образом. Если узел больше не использу-

ется, процесс может закрыть его с помощью функции close, вызвав ее с соответствую-

щим дескриптором узла:

close(s);

Если данные были ассоциированы с узлом, обещающим доставку (тип stream), сис-

тема будет пытаться осуществить передачу этих данных. Тем не менее, по истечении

довольно длительного промежутка времени, если данные все еще не доставлены, они

будут отброшены. Если пользовательский процесс желает немедленно прекратить лю-

бую передачу данных, он может сделать это с помощью вызова shutdown на данном узле

для его закрытия. Формат вызова следующий [12]:

shutdown(s, how);

где how имеет одно из следующих значений:

• 0 - если пользователь больше не желает читать данные

• 1 - если данные больше не будут посылаться

• 2 - если данные не будут ни посылаться ни получаться

Функции преобразования данных. Другой набор функций интерфейса Winsock

связан с преобразованием данных из Сетевого формата в формат базового компьютера и

в обратном направлении (табл.8.2). Эти функции рекомендуется применять даже в том

195

случае, если формат данных одинаков на обоих компьютерах, поскольку они делают

программный код хорошо совместимым и легко переносимым.

Таблица 8.2

Функция

htonl

htons

inet_addr

inet_ntoa

ntohl

ntohs

Во что преобразует

32-разрядное значение из базового формата в сетевой формат TCP/IP

16-разрядное значение из базового формата в сетевой формат TCP/IP

Строку IP-адреса с точками в длинное целое без знака

Сетевой адрес, представленный в виде длинного целого без знака, в

строку IP-адреса с точками

32-разрядное значение из сетевого формата TCP/IP в базовый формат

16-разрядное значение из сетевого формата TCP/IP в базовый формат

Функции просмотра баз данных. Другой, меньший набор функций интерфейса

Winsock состоит из функций просмотра баз данных. Эти функции (их список приведен в

табл.8.3) предназначены для поиска IP-адресов, доменных имен, идентификаторов сер-

висов и номеров портов протоколов. Функции просмотра баз данных во многом работа-

ют подобно своим Unix-аналогам. На каждом базовом компьютере содержится инфор-

мация о сервисах и, как правило, небольшой список доменных имен и IP-адресов. Эти

данные обычно записываются в два текстовых файла, а именно HOSTS и SERVICES, и

функции работы с гнездами используют их в качестве исходной информации об адресах

или номерах сервисов.

Таблица 8.3

Функция

gethostbyaddr

gethostbyname

gethostname

getpeername

getprotobyname

Что возвращает

Информацию о базовом компьютере по заданному адресу

Информацию о базовом компьютере по заданному имени узла

Стандартное базовое имя локального компьютера

Адрес однорангового узла, подключенного к заданному гнезду

Информацию о заданном протоколе (по его имени)

getprotobynumber Информацию о протоколе

getservbyname

getservbyport

getsockname

getsockopt

Информацию о сервисе по заданному имени сервиса и протоколу

Информацию о сервисе по заданному имени, порта и протоколу

Локальное имя заданного гнезда

Текущее значение указанного параметра гнезда

Независимо от операционной системы, под управлением которой работает компь-

ютер (Windows 98, Windows NT или Unix), файл HOSTS содержит базовые адреса и

имена компьютеров, приведенные попарно, а файл SERVICES хранит информацию о

"популярных" сервисах, в том числе соответствующие номера портов, перечень исполь-

зуемых низкоуровневых протоколов и необязательные псевдонимы. В Windows 98 эти

файлы находятся в папке \WINDOWS, а в Windows NT - в папке

\WINNT\SYSTEM32\DRIVERS\ETC.

Ниже приведен фрагмент стандартного файла SERVICES, заимствованного с рабо-

чей станции Windows. Обратите внимание, что в каждой записи указано имя сервиса,

номер порта и тип протокола, а также один или несколько дополнительных (необяза-

тельных) псевдонимов [12].

# Copyright (с) 1993-1995 Microsoft Corp. #

# Этот файл содержит номера портов для популярных сервисов, заданных

# в соответствии со стандартом RFC 1060

#

196

# Формат:

#

# <имя сервиса> <номер порта>/<протокол> [псевдонимы...] [#<комментарий>] #

echo 7/tcp

echo 7/udp

discard 9/tcp sink null

discard 9/udp sink null

systat 11/tcp

systat 11/tcp users

daytime 13/ftcp

daytime 13/udp

netstat 15/tcp

qotd 17/top quote

qotd 17/udp quote

chargen 19/tcp ttytst source

chargen 19/udp ttytst source

ftp-data 20/tcp

ftp 21/tcp

telnet 23/tcp

amtp 25/tcp mail

time 37/tcp timserver

time 37/udp timserver

rip 39/udp resource

name 42/tcp nameserver

name 42/udp nameserver

whois 43/tcp nicname

domain 53/tcp nameserver # сервер доменных имен

domain 53/udp nameserver

nameserver 53/tcp domain # сервер доменных имен

nameserver 53/udp domain

mtp 57/tcp # использовать не рекомендуется

bootp 67/udp # сервер программы загрузки

tftp 69/udp

rje 77/tcp netrjs

finger 79/tcp

link 87/tcp ttylink,

supdup 95/tcp

hostnames 101/tcp hostname

iso-tsap 102/tcp

dictionary 103/tcp webster

x400 103/tcp # ISO-почта

x400-snd 104/tcp

csnet-ns 105/tcp

pop 109/tcp postoffice

pop2 109/tcp # почтовая служба

pop3 110/tcp postoffice

Ниже представлен пример типичного содержимого файла HOSTS. Этот файл

обычно имеет сравнительно малый размер, поскольку большая часть имен переносится

на сервер DNS (сервер доменных имен).

197

# Файл HOSTS, используемый в TCP/IP

102.54.94.97 rhino.acme.com # исходный сервер

38.25.63.10 х.acme.corn # сервер клиента х

127.0.0.1 localhost

В этом файле каждый IP-адрес соответствует имени базового компьютера. Обрати-

те внимание на стандартный адрес 127.0.0.1, соответствующий локальному базовому

компьютеру. (Согласно общепринятой договоренности, адрес 127.0.0.1 всегда указывает

на сам локальный базовый компьютер.) В современных Windows обычно еще имеется

файл LMHOSTS. Он служит для тех же целей, что и файл HOSTS, однако заданные

здесь базовые имена являются NetBIOS-именами. Кроме того, в этом файле могут ис-

пользоваться ключевые слова, не применяемые в файле HOSTS (например, ключевое

слово #DOM позволяет задать контролер домена сети Windows NT).

Иногда поиск адреса сводится к простому просмотру соответствующей записи в

файле HOSTS, но чаще всего поисковый запрос передается на DNS-сервер, который ли-

бо удовлетворяет этот запрос, либо передает его дальше, DNS-серверу первого уровня.

Если искомая запись не обнаружена на сервере первого уровня, запрос передается сле-

дующему по иерархии DNS-серверу. Этот процесс продолжается до тех пор, пока иско-

мая запись не будет обнаружена или пока не закончится процесс поиска (в последнем

случае появится сообщение об ошибке).

Асинхронные версии функций интерфейса Winsock. Для программирования

асинхронных гнезд в Windows рекомендуется использовать WSA-версии функций рабо-

ты с гнездами, которые в качестве параметра обычно принимают значение дескриптора

окна и по окончании выполнения (или при необходимости передачи информации при-

ложению) записывают в очередь сообщений этого окна данные о статусе операции или

сообщение о завершении ее выполнения. Поскольку Windows поддерживает одновре-

менную работу нескольких потоков, можно также использовать синхронные функции,

создавая для них отдельный поток и освобождая основное приложение для обработки

других задач на время выполнения этих функций. Список асинхронных функций приве-

ден в табл.8.4 [12].

Таблица 8.4

WSAAccept

Функция

1

Выполняемое действие

2

В зависимости от определенных условий регист-

рирует соединение и создает группу гнезд или

подключается к существующей группе

WSAAddressToString

WSAAsyncGetHostByAddr

WSAAsyncGetHostByName

WSAAsyncGetProtoByName

WSAAsyncGetProtoByNumber

1

WSAAsyncGetServByName

Преобразует все адреса, содержащиеся в струк-

туре SOCKADDR, в представление, удобное для

восприятия человеком

Получает информацию о базовом компьютере по

заданному адресу

Получает информацию о базовом компьютере по

заданному имени

Получает информацию о заданном протоколе по

его имени

Получает информацию о заданном протоколе по

его номеру

Продолжение табл. 8.4

2

Получает информацию о сервисе по заданному

имени сервиса и протоколу

198

WSAAsyncGetServByPort

WSAAsyncSelect

WSACancelAsyncRequest

WSACleanup

WSACloseEvent

WSAConnect

WSACreateEvent

WSADuplicateSocket

WSAEnumNameSpaceProviders

WSAEnumNetworkEvents

WSAEnumProtocols

WSAEventSelect

WSAGetLastError

WSAGetOverlappedResult

WSAGetQOSByName

WSAGetServiceClassInfo

Получает информацию о сервисе по заданному

номеру порта и протоколу

Просит Windows присылать сообщения о собы-

тиях, происходящих в указанном гнезде

Отменяет незавершенную асинхронную опера-

цию с гнездом

Завершает работу с библиотекой Winsock.DLL

Закрывает дескриптор объекта-события

Подключается к одноранговому узлу, осуществ-

ляет обмен данными о соединении и устанавли-

вает необходимое качество сервиса на основании

заданной спецификации потока

Создает новый объект-событие

Возвращает структуру WSAPROTOCOL_INFO,

которая может использоваться для создания де-

скриптора нового коллективного гнезда

Читает информацию о доступных провайдерах

пространства имен

Читает информацию о событиях, которые про-

изошли в заданном гнезде

Считывает информацию о доступных транспорт-

ных протоколах

Указывает объект-событие, который должен быть

связан с заданными сетевыми событиями

(FD_xxx)

Возвращает код ошибки последней некорректной

операции, выполненной в рамках интерфейса

Winsock

Возвращает результат асинхронной операции в

заданном гнезде

Инициализирует структуру QoS (Quality of Ser-

vice— качество сервиса) на основании именован-

ного шаблона

Запрашивает информацию о классе сервиса у за-

данного провайдера пространства имен

WSAGetServiceClassNameByClassId Возвращает обобщенное имя сервиса для задан-

ного типа сервисов

WSAHtonl

WSAHtons

WSAlnstallServiceClass

WSAloctl

1

WSAJoinLeaf

Преобразует длинное целое без знака из базового

формата в сетевой

Преобразует короткое целое без знака из базово-

го формата в сетевой

Регистрирует схему класса сервисов в простран-

стве имен

Задает режим работы указанного гнезда, а также

конфигурирует гнезда для осуществления безо-

пасной связи с помощью протокола SSL или РСТ

Окончание табл. 8.4

2

Подключается к концевому узлу в сеансе групповой свя-

зи, осуществляет обмен данными о соединении и устанав-

ливает необходимое качество сервиса на основе заданной

199

WSALookupServiceBegin

WSALookupServiceEnd

WSALookupServiceNext

WSANtohl

WSANtohs

спецификации потока

Возвращает дескриптор, который может использоваться в

последующих клиентских запросах для поиска нужной

информации о сервисе

Освобождает дескриптор, созданный функцией

Возвращает следующий набор информации о сервисе, ис-

пользуя заданный дескриптор

Преобразует длинное целое без знака из сетевого формата

в базовый

Преобразует короткое целое без знака из сетевого форма-

та в базовый

WSAProviderConfigChange Информирует приложение об изменении конфигурации

провайдера

WSARecv

WSARecvDisconnect

WSARecvEx

WSARecvFrom

WSARemoveServiceClass

WSAResetEvent

WSASend

WSASendDisconnect

WSASendTo

WSASetEvent

WSASetLastError

WSASetService

WSASocket

WSAStartup

WSAStringToAddress

Считывает данные из заданного гнезда

Прекращает прием данных из заданного гнезда, возвра-

щая данные о разрыве соединения, если таковые посту-

пают

Аналогична функции WSARecv

Считывает дейтаграмму и исходный адрес

Отменяет регистрацию схемы класса сервисов

Сбрасывает заданный объект-событие в несигнальное со-

стояние

Посылает данные в подключенное гнездо, разрешая вы-

полнение асинхронной операции ввода/вывода

Инициирует прекращение связи с заданным гнездом и пе-

редает данные о разрыве соединения

Отправляет данные по указанному адресу, в случае необ-

ходимости используя асинхронные операции вво-

да/вывода

Устанавливает заданный объект-событие в сигнальное

состояние

Устанавливает код ошибки, который возвращается при

последующих вызовах функции WSAGetLastError

Регистрирует или отменяет регистрацию экземпляра сер-

виса в пределах одного или нескольких пространств имен

Создает гнездо, связанное с указанным провайдером

транспортных услуг, создавая при необходимости группу

гнезд или подключаясь к уже существующей группе

Инициирует применение процессом библиотеки Win-

sock.DLL

Преобразует строку адреса в структуру адреса гнезда

WSAWaitForMultipleEvents Завершается, если один или все указанные объекты-

события переходят в сигнальное состояние или если за-

вершается период ожидания

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]