Полезные замечания по winsock

Лишь при успешной реализации всех перечисленных в первой части статьи операций может начаться обмен данными с помощью конечно же программирования. Для пересылки данных могут использоваться команды write, read, send, recv. Команды write и read имеют форму вызова:

R=write(s, buf, len) или R=read(s, buf, len),

где s - дескриптор соединителя, buf - имя массива, подлежащего пересылке (или предназначенного для приема), len - длина этого массива. Оператор writev отличается от write тем, что данные могут не лежать в виде непрерывного массива:

R=writev(s, io_vect, vectlen) или R=readv(s, io_vect, vectlen),

где s - дескриптор соединителя, io_vect - вектор-указатель на список указателей, vectlen - длина списка указателей. Команда выполняется медленнее, чем write или read.

Команды send(s, msg_buf, buflen, flags) и recv имеют аналогичный формат, но среди параметров обращения содержат переменную flags, которая служит для целей диагностики и управления передачей данных (например, пересылка информации с высоким приоритетом (MSG_OOB - Message Out Of Band), что используется, в частности, при передаче звуковых сообщений). При работе с операторами send или recv надо быть уверенным, что принимающая сторона знает, что ей следует делать с этими приоритетными сообщениями. Часто используется в спутниковых сетях

Другой возможный флаг, определяемый константой MSG_PEEK, позволяет анализировать запросы из входной очереди транспортного уровня. Обычно после считывания данных из входной очереди, они уничтожаются. Когда MSG_PEEK=1, данные из входной очереди не стираются. Этот флаг используется, например, программой FTP. При успешном выполнении команды будет возвращено число переданных байтов, в противном случае -1. используется в vsat сетях

Все перечисленные выше операторы рассчитаны на использование в рамках протоколов, ориентированных на установление соединения (TCP), где не требуется указание адреса места назначения. В протоколах типа UDP (не ориентированных на соединение) для передачи информации используются операторы sendto, recvfrom или sendmsg:

R=sendto(s, msg_buf, buflen, flags, adr_struc, adr_struc_len)

или recvfrom(s, msg_buf, buflen, flags, adr_struc, adr_struc_len),

где s - дескриптор соединителя, msg_buf - указатель на буфер, где лежит сообщение, buflen - длина этого буфера (длина сообщения), adr_struc - адресная структура, содержащая исчерпывающую информацию об адресате, adr_struc_len - длина этой структуры. Оператор recvfrom принимает все данные, приходящие на его порт. Приняв дейтограмму, recvfrom записывает также адрес, откуда эта дейтограмма получена. Сервер может посылать по этому адресу дейтограмму-отклик. Вызов оператора sendmsg имеет форму:

R=sendmsg(s, msg_struc, flags) [или recvmsg(s, msg_struc, flags)],

где s - дескриптор соединителя, msg_struc - информационная структура, формат которой показан ниже на рисунке 4. Применение структур делает программирование пересылки сообщений более гибким. Следует учитывать, что для обменов, не ориентированных на соединение, соединитель как бы состоит лишь из одной половины (IP-адрес и номер порта). Они могут принимать пакеты от других аналогичных оединителей сами посылать им дейтограммы (кавычки здесь связаны с тем, что это не реальный соединитель и никакого соединения здесь не осуществляется).

Взаимодействие операторов winsock для систем, не ориентированных на соединение, показано на рисунке 5. Здесь также как и в случае, ориентированном на соединение, сервер вызывает socket и bind, после чего обращается к процедуре recvfrom (вместо read или recv). Программа-клиент в данной схеме обращается к оператору bind и совсем не использует оператор connect (ведь предварительного соединения не нужно). Для передачи запросов и приема откликов здесь служат операторы sendto и recvfrom, соответственно.

Помимо уже описанных операторов для работы с соединителями (sockets) имеется еще один - select, довольно часто используемый серверами. Оператор select позволяет процессу отслеживать состояние одного или нескольких соединителей. Для каждого соединителя вызывающая программа может запросить информацию о статусе read, write или error. Форма обращения имеет вид:

R=select(num_of_socks, read_socks, write_socks, error_socks, max_time),
где num_of_socks - число контролируемых соединителей (в некоторых реализациях не используется и является необязательным, по умолчанию это число не должно превышать 64). В версии Беркли read_socks, write_socks и error_socks представляют собой побитовые маски, определяющие тип соединителя. Параметр read_socks представляет собой указатель на структуру, описывающую набор соединителей, состояние которых контролируется на возможность чтения (версия winsock). Если соединитель находится в состоянии listen, он будет помечен как отов для чтенияпри условии, что запрос на соединение уже получен. Это предполагает выполнение оператора accept без блокировки. Для других соединителей отовность к чтениюодразумевает наличие в очереди запросов чтения. Для соединителей типа SOCK_STREAM это означает, что виртуальный соединитель, соответствующий данному соединителю закрылся, и операторы recv или recvfrom будут выполнены без блокировки. Если виртуальное соединение закрыто корректно, оператор recv вернет код 0, в противном случае (например, принудительное закрытие) будет возвращен код WSAECONNRESET. Параметр write_socks - указатель на набор соединителей, состояние которых контролируется на возможность записи. Если соединитель находится в процессе выполнения процедуры connect, пособность к записизначает, что установление связи завершено. Для других соединителей это значит, что операции send или sendto будут выполнены без блокировки. Параметр error_socks - это указатель на набор соединителей, контролируемых на ошибки. В некоторых реализациях этот аргумент идентифицирует список соединителей, помеченных как приоритетные. Соединитель помечается как приоритетный, если опция SO_OOBINLINE=FALSE. На случай ошибки оператор select отмечает соединитель, где это произошло. select работает лишь с теми соединителями, которые были выделены с помощью масок. При успешном выполнении оператор возвращает число соединителей, готовых к операциям ввода/вывода и модифицирует коды масок в соответствии с состоянием соединителей. Прикладная программа может использовать результаты вызова оператора select, анализируя полученные коды масок. Аргумент max_time определяет максимальное время, выделенное select для завершения своей работы. Для уточнения типа ошибки, возникшей при исполнении операции select, можно воспользоваться процедурой WSAGetLastError.

Другим важным оператором является closesocket(s), который закрывает канал соединителя с одной из сторон. Все описанные выше операторы (кроме socket, bind и listen) блокируют работу программы до своего завершения. Практически любая операция, непосредственно связанная с выполнением процедур ввода/вывода, может блокировать выполнение других прикладных функций winsock.

Для обслуживания прикладных процессов (например, WWW-сервера, работа с распределенными базами данных и пр. ) разработано много других сервисных программ (WINSOCK. DLL), перечень которых представлен в таблице.

Имя команды Назначение
Getdomainname Возвращает имя домена
Gethostbyname Возвращает IP-адрес для заданного сетевого имени.
Gethostname Возвращает имя ЭВМ (обычно имя ее домена).
Gethostadr Возвращает IP-адрес ЭВМ.
Getnetaddr Возвращает адрес сети.
Getnetname Возвращает имя сети.
Getpeername Возвращает имя партнера, подключенного к соединителю.
Getportbyname Возвращает имя и код протокола для указанного имени (например, ICMP, UDP или TCP)
Getportbynumber Возвращает имя протокола для указанного его кода
Getservbyname Извлекает из базы данных название протокола и номер порта для указанного имени сетевой услуги
Getservbyport Возвращает имя сетевой услуги для заданного номера порта
Getsockname Возвращает местный адрес соединителя.
Getsockopt Запрашивает информацию о соединителе.
Htonl Преобразует порядок байтов 32-разрядного кода из машинного в сетевой.
Htons Преобразует порядок байтов 16-разрядного кода из машинного в сетевой.
inet_addr Преобразует символьную строку IP-адреса из десятично-точечного формата в 32-разрядный код с сетевым порядком байтов.
inet_ntoa Преобразует IP-адрес в десятично-точечный формат.
Ioctlsocket Управляет параметрами соединителя, связанными с обработкой операций ввода/вывода.
Ntohl Преобразует порядок байтов 32-разрядного кода из сетевого в машинный.
Ntohs Преобразует порядок байтов 16-разрядных кодов из сетевого в машинный.
Ethostname Устанавливает имя ЭВМ.
Setsockopt Устанавливает опции соединителя.
Socketpair Генерирует пару соединителей.

Море IT - Интернет портал

Автор статьи: неизвестный | Дата публикации: 15:56 14.12.2016 Effectdaily.Ru




Отзывы и комментарии
Ваше имя (псевдоним):
Проверка на спам:

Введите символы с картинки:



Ноутбук - как сохранить здоровье жёсткого диска?

Ноутбук - как сохранить здоровье жёсткого дис...


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


Аудиокниги модель для сборки, и где такие найти

Аудиокниги модель для сборки, и где такие най...


Широко известные в наши дни аудиокниги, сейчас доступны как никогда. При этом больше всего интересует людей всех возрастов, аудиокниги модель для сборки. Собственно модель для сборки, представляет соб...


Достопримечательности Евпатории: 5 лучших мест

Достопримечательности Евпатории: 5 лучших мес...


Наверное, трудно найти человека в постсоветском пространстве, который не слышал о Евпатории. Чего стоят только эти заманчивые, кружащие головы каждого туриста, слова Маяковского: «Очень жаль мне тех, ...


О регистрации ООО и ИП

О регистрации ООО и ИП


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


Польза и вред подсолнечного масла

Польза и вред подсолнечного масла


Сейчас нам кажется, что масло это было на Руси всегда – как же можно было без него обходиться в быту? Но это не совсем так. Масло подсолнечное появилось на Руси при Петре Первом, который, как известно...


Борис I - российский авантюрист, британский шпион или герой «андоррской революции»?

Борис I - российский авантюрист, британский ш...


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


Познавательное

Иероним Босх: где аллегория, а где загадка?

Роттердамский музей в Нидерландах располагает целым рядом произведений Иеронима Босха (1450−1516), одного из самых необычных и загадочных мастеров в мировой истории живописи. Иероним Босх отлич...

Для тех кто хочет поставить Натяжные потолки

>>Художественные натяжные потолкиВполне понятно желание каждого придать своему дому индивидуальность. Время побелки потолков миновало. На смену пришёл период новых технологий, а вместе с ним в нашу жи...

Вкусные рецепты: салат с тунцом, Салат " Шпро

салат с тунцомТунец с соком размять вилкой. Добавить майонез и 1 ч л красного сл перца. Всё перемешать. Мелко нарезать сельдерей и сладкий перец. Перемешать с тунцом. Выложить в салатник на листья сал...

Сын и отчим. Как подружить?

«Моему сыну 4 года, родила и воспитывала его одна, помогала мама. Ребенок рос активным, капризным, одним словом, избалованным. Но вот уже 10 месяцев, как моя личная жизнь стала налаживаться: я ...

Астрология. Влияние двенадцатого дома наталъной ка

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

Не пускать красного петуха

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

Прогнозы IBM до 2015 года

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

27-29 ноября – выставка в Крыму!

Мероприятие под названием «Безопасность. Крым-2015» пройдет в городе Ялта в период с 27 по 29 ноября. Одним из активных участников встречи является предприятие ООО «Плазма-Т», которое специализируется...

Устройство газона на дачном участке.Виды газонов.

Всякий человек, задумывающийся над вопросом преображения территории своего участка, непременно желает наилучшим образом воплотить эту задумку.И понятно, газон - это тот элемент сада, который объединяе...

Кому молятся католики перед выходом в Интернет?

Знаете ли вы, что у Интернета есть свой ангел-хранитель? Пока, правда, только в католическом варианте. Зовут его святой Исидор, и его именины празднуются сегодня, 4 апреля. Покровителя юзеров ка...

О информационном портале:

Наш сайт является ресурсом, который включает в себя широкий каталог познавательных и занимательных статей. Каждый посетитель отыщет для себя что-нибудь нужное. Адаптированный дизайн дает возможность вам максимально быстро находить подходящую информацию. Самые разнообразные тематические статьи дают возможность вам совершенствоваться в той или иной сфере. Быть более начитанным и грамотным. Современный дизайн сайта позволяет просматривать статьи на всех гаджетах. Теперь найти нужную информацию стало просто.

Мы собрали для вас полезные и отличные статьи. На нашем сайте вы найдете ответы на необходимые для вас вопросы. Упрощенная система поиска позволяет вам мгновенно отыскать нужную информацию. Адаптированный дизайн позволяет вам просматривать информацию на абсолютно любых гаджетах. Теперь, поиск подходящей информации будет занимать у вас секунды.