UNIX: разработка сетевых приложений - Уильям Стивенс
0/0

UNIX: разработка сетевых приложений - Уильям Стивенс

Уважаемые читатели!
Тут можно читать бесплатно UNIX: разработка сетевых приложений - Уильям Стивенс. Жанр: Программное обеспечение. Так же Вы можете читать полную версию (весь текст) онлайн книги без регистрации и SMS на сайте Knigi-online.info (книги онлайн) или прочесть краткое содержание, описание, предисловие (аннотацию) от автора и ознакомиться с отзывами (комментариями) о произведении.
Описание онлайн-книги UNIX: разработка сетевых приложений - Уильям Стивенс:
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.

Аудиокнига "UNIX: разработка сетевых приложений" от Уильяма Стивенса



📚 "UNIX: разработка сетевых приложений" - это увлекательное путешествие в мир UNIX и сетевого программирования. В книге автор подробно рассматривает основные принципы разработки сетевых приложений под UNIX, раскрывая множество интересных тем и примеров.



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



👨‍💻 Уильям Стивенс - известный специалист в области компьютерных наук, автор множества книг по сетевому программированию. Его работы пользуются популярностью среди разработчиков и студентов по всему миру.



На сайте knigi-online.info вы можете бесплатно и без регистрации слушать аудиокниги онлайн на русском языке. Здесь собраны бестселлеры и лучшие произведения различных жанров, чтобы каждый мог найти что-то по душе.



🎧 Погрузитесь в увлекательный мир UNIX и сетевого программирования вместе с аудиокнигой "UNIX: разработка сетевых приложений" от Уильяма Стивенса. Развивайте свои навыки, открывайте новые горизонты и наслаждайтесь процессом обучения!

Читем онлайн UNIX: разработка сетевых приложений - Уильям Стивенс

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 2 3 4 5 6 7 8 9 10 ... 263

Удивительно много сетевых атак было реализовано хакерами с использованием незащищенности sprintf от переполнения буфера. Есть еще несколько функций, с которыми нужно быть аккуратными: gets, strcat и strcpy. Вместо них лучше использовать fgets, strncat и strncpy. Еще лучше работают более современные функции strlcat и strlcpy, возвращающие в качестве результата правильно завершенную строку. Полезные советы, касающиеся написания надежных сетевых программ, можно найти в главе 23 книги [32].

Завершение соединения

22 Сервер закрывает соединение с клиентом, вызывая функцию close. Это инициирует обычную последовательность прерывания соединения TCP: пакет FIN посылается в обоих направлениях, и каждый пакет FIN распознается на другом конце соединения. Более подробно трехэтапное рукопожатие и четыре пакета TCP, используемые для прерывания соединения, будут описаны в разделе 2.6.

Сервер времени и даты был рассмотрен нами достаточно кратко, как и клиент из предыдущего раздела. Запомните следующие моменты.

■ Сервер, как и клиент, зависим от протокола IPv4. В листинге 11.7 мы покажем версию, не зависящую от протокола, которая использует функцию getaddrinfo.

■ Наш сервер обрабатывает только один запрос клиента за один раз. Если приблизительно в одно время происходит множество клиентских соединений, ядро ставит их в очередь, максимальная длина которой регламентирована, и передает эти соединения функции accept по одному за один раз. Наш сервер времени и даты, который требует вызова двух библиотечных функций, time и ctime, является достаточно быстрым. Но если у сервера обслуживание каждого клиента занимает больше времени (допустим, несколько секунд или минуту), нам будет необходимо некоторым образом организовать одновременное обслуживание нескольких клиентов.

Сервер, показанный в листинге 1.5, называется последовательным сервером (iterative server), поскольку он обслуживает клиентов последовательно, по одному клиенту за один раз. Существует несколько технологий написания параллельного сервера (concurrent server), который обслуживает множество клиентов одновременно. Самой простой технологией является вызов функции Unix fork (раздел 4.7), когда создается по одному дочернему процессу для каждого клиента. Другой способ — использование программных потоков (threads) вместо функции fork (раздел 26.4) или предварительное порождение фиксированного количества дочерних процессов с помощью функции fork в начале работы (раздел 30.6).

■ Запуская такой сервер из командной строки, мы обычно рассчитываем, что он будет работать достаточно долго, поскольку часто серверы работают, пока работает система. Поэтому мы должны модифицировать код сервера таким образом, чтобы он корректно работал как демон (daemon) Unix, то есть процесс, функционирующий в фоновом режиме без подключения к терминалу. Это решение подробно описано в разделе 13.4.

1.6. Таблица соответствия примеров технологии клиент-сервер

Технологии сетевого программирования иллюстрируются в этой книге на двух основных примерах:

■ клиент-сервер времени и даты (описание которого мы начали в листингах 1.1, 1.2 и 1.5), и

■ эхо-клиент-сервер (который появится в главе 5).

Чтобы обеспечить удобный поиск различных тем, которых мы касаемся в этой книге, мы объединили разработанные нами программы и сопроводили их номерами листингов, в которых приведен исходный код. В табл. 1.1 перечислены версии клиента времени и даты (две из них мы уже видели). В табл. 1.2 перечисляются версии сервера времени и даты. В табл. 1.3 представлены версии эхо-клиента, а в табл. 1.4 — версии эхо-сервера.

Таблица 1.1. Различные версии клиента времени и даты

Листинг Описание 1.1 TCP/Ipv4, зависимый от протокола 1.2 TCP/Ipv6, зависимый от протокола 11.2 TCP/Ipv4, зависимый от протокола, вызывает функции gethostbyname и getservbyname 11.5 TCP, независимый от протокола, вызывает функции getaddrinfo и tcp_connect 11.10 UDP, независимый от протокола, вызывает функции getaddrinfo и udp_connect 16.7 TCP, использует неблокирующую функцию connect 31.2 TCP/IPv4, зависимый от протокола Д.1 TCP, зависимый от протокола, генерирует SIGPIPE Д.2 TCP, зависимый от протокола, печатает размер буфера сокета и MSS Д.5 TCP, зависимый от протокола, допускает использование имени узла (функция gethostbyname) или IP-адреса Д.6 TCP, независимый от протокола, допускает использование имени узла (функция gethostbyname).

Таблица 1.2. Различные версии сервера времени и даты, рассматриваемые в данной книге

Листинг Описание 1.5 TCP/IPv4, зависимый от протокола 11.7 TCP, независимый от протокола, вызывает getaddrinfo и tcp_listen 11.8 TCP, независимый от протокола, вызывает getaddrinfo и tcp_listen 11.13 UDP, независимый от протокола, вызывает getaddrinfo и udp_server 13.2 TCP, независимый от протокола, выполняется как автономный демон 13.4 TCP, независимый от протокола, порожденный демоном inetd

Таблица 1.3. Различные версии эхо-клиента, рассматриваемые в данной книге

Листинг Описание 5.3 TCP/IPv4, зависимый от протокола 6.1 TCP, использует функцию select 6.2 TCP, использует функцию select и работает в пакетном режиме 8.3 UDP/IPv4, зависимый от протокола 8.5 UDP, проверяет адрес сервера 8.7 UDP, вызывает функцию connect для получения асинхронных ошибок 14.2 UDP, тайм-аут при чтении ответа сервера с использованием сигнала SIGALRM 14.4 UDP, тайм-аут при чтении ответа сервера с использованием функции select 14.5 UDP, тайм-аут при чтении ответа сервера с использованием опции сокета SO_RCVTIMEO 14.7 TCP, использует интерфейс /dev/poll 14.8 TCP, использует интерфейс kqueue 15.4 Поток домена Unix, зависит от протокола 15.6 Дейтаграмма домена Unix, зависит от протокола 16.1 TCP, использует неблокируемый ввод-вывод 16.6 TCP, использует два процесса (функцию fork) 16.14 TCP, устанавливает соединение, затем посылает пакет RST 20.1 UDP, широковещательный, ситуация гонок 20.2 UDP, широковещательный, ситуация гонок 20.3 UDP, широковещательный, для устранения ситуации гонок используется функция pselect 20.5 UDP, широковещательный, для устранения ситуации гонок используются функции sigsetjmp и siglongmp 20.6 UDP, широковещательный, для устранения ситуации гонок в обработчике сигнала используется IPC 22.4 UDP, увеличение надежности протокола за счет применения повторной передачи, тайм-аутов и порядковых номеров 26.1 TCP, использование двух потоков 27.4 TCP/IPv4, задание маршрута от отправителя 27.5 UDP/IPv6, задание маршрута от отправителя

Таблица 1.4. Различные версии эхо-сервера, рассматриваемые в данной книге

1 2 3 4 5 6 7 8 9 10 ... 263
На этой странице вы можете бесплатно читать книгу UNIX: разработка сетевых приложений - Уильям Стивенс бесплатно.
Похожие на UNIX: разработка сетевых приложений - Уильям Стивенс книги

Оставить комментарий

Рейтинговые книги