UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Задание флага
wait
inetd
select
1. После выполнения функции
fork
waitpid
2. Родительский процесс отключает способность сокета выполнять последующие функции
select
FD_CLR
3. Когда завершается дочерний процесс, родительский процесс уведомляется об этом с помощью сигнала
SIGCHLD
select
Причина, по которой дейтаграммный сервер должен завладевать сокетом, пока он не завершит работу, лишая тем самым демон
inetd
select
inetd
inetd
select
inetd
fork
inetd
inetd
SIGCHLD
Пять стандартных служб Интернета, описанных в табл. 2.1, обеспечиваются самим демоном
inetd
Поскольку функцию
accept
inetd
inetd
getpeername
fork
exec
inetd
getpeername
Демон
inetd
sendmail
fork
inetd
fork
exec
13.6. Функция daemon_inetd
В листинге 13.3 показана функция
daemon_inetd
inetd
Листинг 13.3. Функция daemon_inetd для придания свойств демона процессу, запущенному демоном inetd
//daemon_inetd.c
1 #include "unp.h"
2 #include <syslog.h>
3 extern int daemon_proc; /* определено в error.c */
4 void
5 daemon_inetd(const char *pname, int facility)
6 {
7 daemon_proc = 1; /* для наших функций err_XXX() */
8 openlog(pname, LOG_PID, facility);
9 }
Эта функция тривиальна по сравнению с
daemon_init
inetd
daemon_proc
openlog
daemon_init
Пример: сервер времени и даты, активизированный демоном inetd
Листинг 13.4 представляет собой модификацию нашего сервера времени и даты, показанного в листинге 13.2, который может быть активизирован демоном
inetd
Листинг 13.4. Не зависящий от протокола сервер времени и даты, который может быть активизирован демоном inetd
//inetd/daytimetcpsrv3.c
1 #include "unp.h"
2 #include <time.h>
3 int
4 main(int argc, char **argv)
5 {
6 socklen_t len;
7 struct sockaddr *cliaddr;
8 char buff[MAXLINE];
9 time_t ticks;
10 daemon_inetd(argv[0], 0);