О чём не пишут в книгах по Delphi
Шрифт:
Как уже говорилось, если буфер для исходящих имеет нулевой размер, то функции
В MSDN описаны следующие правила роста буфера:
1. Если объем данных в буфере меньше, чем это задано параметром
2. Если объем данных в буфере достиг или превысил
3. Если объем данных в буфере достиг или превысил
Следует отметить, что увеличение размера буфера носит временный характер.
Заметим также, что в ходе наших экспериментов второе правило воспроизвести не удалось. Если предел, заданный параметром
Ранее мы упоминали, что UDP допускает широковещательную рассылку (рассылку по адресу 255.255.255.255 и т.п.). Но по умолчанию такая рассылка запрещена. Чтобы разрешить широковещательную рассылку, нужно установить в
Для запрета широковещательной рассылки через сокет используется тот же код, за исключением того, что переменной
Последний параметр сокета, который мы рассмотрим, называется
Поле
Остальные параметры сокета детально описаны в MSDN.
2.1.18. Итоги первого раздела
Мы рассмотрели основные принципы работы со стандартными сокетами. Хотя многое осталось за кадром, того, что здесь было написано, достаточно, чтобы начать создавать разнообразные приложения с использованием сокетов. Для самостоятельного изучения рекомендуется сделать следующее:
□ Для каждой из упоминавшихся здесь функций выяснить, какие ошибки может возвращать
□ посмотреть, какие еще параметры (опции) есть у сокета;
□ самостоятельно разобраться с не упомянутыми здесь функциями
Из приведенных примеров видно, что стандартные сокеты достаточно интегрируются с пользовательским интерфейсом, однако приложение, использующее их, вынуждено самостоятельно опрашивать сокеты с определённой периодичностью (например, по таймеру). Это не совпадает с принятой в Windows схемой событийного управления программой, основанной на принципе "пусть мне скажут, когда что-то произойдет, и я отреагирую". Именно поэтому стандартные сокеты были расширены и появились сокеты Windows, с которыми мы познакомимся далее.
2.2. Сокеты Windows
В предыдущих разделах мы рассмотрели те методы работы с сокетами, которые восходят еще к сокетам Беркли. Разработчики библиотеки сокетов для Windows добавили в нее также поддержку новых методов, упрощающих работу с сокетами для приложений, имеющих традиционную для Windows событийно-ориентированную модель. В Windows можно использовать асинхронные сокеты и перекрытый ввод-вывод. Далее мы рассмотрим эти расширения, а также ряд новых функций, пришедших на смену "морально устаревшим" функциям из стандартных сокетов.
Материал здесь, как и ранее, не претендует на полноту, а предназначен лишь для знакомства с наиболее часто употребляемыми возможностями библиотеки сокетов. По-прежнему рассматриваются только протоколы TCP и UDP. Не будут затронуты такие вопросы, как поддержка качества обслуживания, пространства имен, простые сокеты (
2.2.1. Версии Windows Sockets
При рассмотрении функции WSAStartup уже упоминалось, что существуют разные версии библиотеки сокетов, которые заметно различаются по функциональности. К сожалению, полный перечень существующих на сегодняшний день версий Windows Sockets и их особенностей в документации в явном виде не приводится, но, изучая разрозненную информацию, можно сделать некоторые выводы, которые приведены в табл. 2.1. В дальнейшем, если не оговорено иное, под WinSock 1 мы будем подразумевать версию 1.1, под WinSock 2 — версию 2.2.