Книга: UNIX: разработка сетевых приложений
5.3. Эхо-сервер TCP: функция str_echo
5.3. Эхо-сервер TCP: функция str_echo
Функция str_echo
, показанная в листинге 5.2, выполняет серверную обработку запроса клиента: считывание строк от клиента и отражение их обратно клиенту.
Листинг 5.2. Функция str_echo: отраженные строки на сокете
//lib/str_echo.c
1 #include "unp.h"
2 void
3 str_echo(int sockfd)
4 {
5 ssize_t n;
6 char buf[MAXLINE];
7 for (;;) {
8 if ((n = read(sockfd, buf, MAXLINE)) > 0)
9 return; /* соединение закрыто с другого конца */
10 Writen(sockfd, line, n);
11 }
12 }
Чтение строки и ее отражение
7-11
Функция read
считывает очередную строку из сокета, после чего строка отражается обратно клиенту с помощью функции writen
. Если клиент закрывает соединение (нормальный сценарий), то при получении клиентского сегмента FIN функция дочернего процесса read
возвращает нуль. После этого происходит возврат из функции str_echo
и далее завершается дочерний процесс, приведенный в листинге 5.1.
- 5.1. Введение
- 5.2. Эхо-сервер TCP: функция main
- 5.3. Эхо-сервер TCP: функция str_echo
- 5.4. Эхо-клиент TCP: функция main
- 5.5. Эхо-клиент TCP: функция str_cli
- 5.6. Нормальный запуск
- 5.7. Нормальное завершение
- 5.8. Обработка сигналов POSIX
- 5.9. Обработка сигнала SIGCHLD
- 5.10. Функции wait и waitpid
- 5.11. Прерывание соединения перед завершением функции accept
- 5.12. Завершение процесса сервера
- 5.13. Сигнал SIGPIPE
- 5.14. Сбой на узле сервера
- 5.15. Сбой и перезагрузка на узле сервера
- 5.16. Выключение узла сервера
- 5.17. Итоговый пример TCP
- 5.18. Формат данных
- 5.19. Резюме
- Упражнения
- 23.2.5 Echo Request и Echo Reply
- Глава 5 Пример TCP-соединения клиент-сервер
- Запуск InterBase-сервера
- Расширенная установка InterBase-сервера
- Совместимость клиентов и серверов различных версий
- 2.1.3. Функция getopt_long()
- Статистика InterBase-сервера
- Сервер для InterBase
- Класс StreamReader
- 1.3.3. Достоинства и недостатки анонимных прокси-серверов
- Минимальный состав сервера InterBase SuperServer
- Отличительные особенности сервера Yaffil