Полезные замечания по 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




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

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



Зачем предприятию корпоративная газета? Оргкультура глазами обывателя

Зачем предприятию корпоративная газета? Оргку...


Чем крупнее предприятие, тем больше шансов, что оно имеет свою корпоративную газету. И тираж её порой больше тиража других местных газет (за исключением рекламных изданий). Работники получают её обычн...


Как можно оформить кредитку и получать бонусные мили?

Как можно оформить кредитку и получать бонусн...


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


Андрей Петров: как киноактер чуть не стал шахтером?

Андрей Петров: как киноактер чуть не стал шах...


19 декабря 1919 года, 90 лет назад, в Саратове, в семье провинциального 31-летнего актера Алексея Петрова появился на свет сын. Его назвали Андреем. Воспитанием мальчика чаще занималась мама, пот...


Какие бывают шейкеры

Какие бывают шейкеры


ШейкерыШейкер (от англ. shake — трясти) — прибор для изготовления напитков и коктейлей методом встряхивания.Чаще всего шейкер на 75% наполнен льдом. В основном шейкеры изготавливаются из металла, но е...


Языки Балтики. Часть I

Языки Балтики. Часть I


Балтийские языки принадлежат к индоевропейской языковой семье. В состав группы входят литовский, латышский и куршский языки («мертвый» язык) – восточно-балтийская группа; прусский и ятвяжский языки вы...


Обмен женами

Обмен женами


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


Интересное

Станок для производства сетки Рабица

Сетка рабица наверное самый распространенный и известный в народе тип стальной плетеной сетки. Область применения рабицы не ограничивается армированием штукатурки и бетона при строительстве. Благодаря...

Из-за чего возникают поломки в стиральных машинах?

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

Чем отличается электронная книга от своей бумажной

Электронные книги медленно, но уверенно завоевали признание во всем мире. Так, ведущий аналитик в области мобильных технологий, Джерри Парди сказал, что книги в электронном формате станут наиболее рас...

Эскиз семейной идиллии, или На какой кулинарный ше

Я захотел устроить бал, И я гостей к себе… Купил муку, купил творог, Испек рассыпчатый… Пирог, ножи и вилки тут — Но что-то гости… Я ждал, пока хватило сил, Потом ку...

Алмазная резка проемов. Технология и инструмент.

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

Женский нрав: что о нем говорится в пословицах и п

Женской теме в устном народном творчестве уделено немалое внимание, а уж пословиц и поговорок — что называется, не перечесть. Только давайте сразу договоримся, что на пасквильных высказыван...

Как выбрать пуховик?

«Это хорошо, что вы такой зеленый и плоский!» («Чебурашка») Шапокляк говорила так крокодилу Гене. Но у нас речь пойдет о разноцветных и объемных, на любой вкус! Нет, не о кроко...

Дежавю

Дежавю(фр. - уже виденное). Психологический эффект, заключающийся в восприятии какой-либо, новой ситуации, как уже случавшейся в прошлом. Это произошло со мной, во время свадебного путешествия по ...

Вкусные рецепты: ПРЯНЫЕ ЧЕРРИ С ШАМПИНЬОНАМИ, Пиро

ПРЯНЫЕ ЧЕРРИ С ШАМПИНЬОНАМИИНГРЕДИЕНТЫ: 300г помидоров, 300г мелких шампиньонов, 50мл уксуса, 50мл р/м, по 3 шт. гвоздики, и лавр.листа, кориандр, зира, чеснок, зерна горчицы и всего остального по шеп...

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

В настоящее время перевод в нашей стране переживает, прямо скажем, тяжелые времена. Не смотря на то, что книжные полки магазинов и библиотек переполнены изобилием неслыханно дорогой переводной литерат...

Развивая портал:

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

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