Чтение онлайн

на главную - закладки

Жанры

Программирование для Linux. Профессиональный подход

Самьюэл Алекс

Шрифт:

■ Функция

module_close
закрывает совместно используемую библиотеку, соответствующую указанному модулю, и удаляет объект
module
.

В файле module.c определена также глобальная переменная module_dir. В ней записано имя каталога, в котором функция module_open будет искать совместно используемые библиотеки.

11.2.3. Сервер

Файл

server.c
(листинг 11.4) представляет собой реализацию простейшего HTTP-сервера.

Листинг 11.4. (server.c)
Реализация HTTP-сервера

#include <arpa/inet.h>

#include <assert.h>

#include <errno.h>

#include <netinet/in.h>

#include <signal.h>

#include <stdio.h>

#include <string.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <sys/wait.h>

#include <unistd.h>

#include "server.h"

/* HTTP-ответ и заголовок, возвращаемые в случае

успешной обработки запроса. */

static char* ok_response =

 "HTTP/1.0 100 OK\n"

 "Content-type: text/html\n"

 "\n";

/* HTTP-ответ, заголовок и тело страницы на случай

непонятного запроса. */

static char* bad_request_response =

 "HTTP/1.0 400 Bad Reguest\n"

 "Content-type: text/html\n"

 "\n"

 "<html>\n"

 " <body>\n"

 " <h1>Bad Request</h1>\n"

 " This server did not understand your request.\n"

 " </body>\n"

 "</html>\n";

/* HTTP-ответ, заголовок и шаблон страницы на случай,

когда запрашиваемый документ не найден. */

static char* not_found_response_template =

 "HTTP/1.0 404 Not Found\n"

 "Content-type: text/html\n"

 "\n"

 "<html>\n"

 " <body>\n"

 " <h1>Not Found</h1>\n"

 " The requested URL %s was not found on this server.\n"

 " </body>\n"

 "</html>\n";

/* HTTP-ответ,
заголовок к шаблон страницы на случай,

когда запрашивается непонятный метод */

static char* bad_method_response_template =

 "HTTP/1.0 501 Method Not Implemented\n"

 "Content-type: text/html\n"

 "\n"

 "<html>\n"

 " <body>\n"

 " <h1>Method Not Implemented</h1>\n"

 " The method %s is not implemented by this server.\n"

 " </body>\n"

 "</html>\n";

/* Обработчик сигнала SIGCHLD, удаляющий завершившиеся

дочерние процессы. */

static void clean_up_child_process(int signal_number) {

 int status;

 wait(&status);

}

/* Обработка HTTP-запроса "GET" к странице PAGE и

запись результата в файл с дескриптором CONNECTION_FD. */

static void handle_get(int connection_fd, const char* page) {

 struct server_module* module = NULL;

 /* Убеждаемся, что имя страницы начинается с косой черты и

не содержит других символов косой черты, так как

подкаталоги не поддерживаются. */

 if (*page == '/' && strchr(page + 1, '/') == NULL) {

char module_file_name[64];

/* Имя страницы правильно. Формируем имя модуля, добавляя

расширение ".so" к имени страницы. */

snprintf(module_file_name, sizeof(module_file_name),

"%s.so", page + 1);

/* Попытка открытия модуля. */

module = module_open(module_file_name);

 }

 if (module == NULL) {

/* Имя страницы неправильно сформировано или не удалось

открыть модуль с указанным именем. В любом случае

возвращается HTTP-ответ "404. Not Found". */

char response[1024];

/* Формирование ответного сообщения. */

snprintf(response, sizeof(response),

not_found_response_template, page);

Поделиться:
Популярные книги

Как я строил магическую империю 4

Зубов Константин
4. Как я строил магическую империю
Фантастика:
боевая фантастика
постапокалипсис
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 4

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Попаданка 3

Ахминеева Нина
3. Двойная звезда
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Попаданка 3

Муж на сдачу

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Муж на сдачу

Призыватель нулевого ранга. Том 3

Дубов Дмитрий
3. Эпоха Гардара
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Призыватель нулевого ранга. Том 3

На границе империй. Том 10. Часть 5

INDIGO
23. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 5

Адвокат

Константинов Андрей Дмитриевич
1. Бандитский Петербург
Детективы:
боевики
8.00
рейтинг книги
Адвокат

На границе империй. Том 7

INDIGO
7. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
6.75
рейтинг книги
На границе империй. Том 7

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

О, Путник!

Арбеков Александр Анатольевич
1. Квинтет. Миры
Фантастика:
социально-философская фантастика
5.00
рейтинг книги
О, Путник!

Чужбина

Седой Василий
2. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужбина

Бестужев. Служба Государевой Безопасности. Книга четвертая

Измайлов Сергей
4. Граф Бестужев
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга четвертая

Локки 5. Потомок бога

Решетов Евгений Валерьевич
5. Локки
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Локки 5. Потомок бога

На границе империй. Том 10. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 4