UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Задание флага
waitinetdselect1. После выполнения функции
forkwaitpid2. Родительский процесс отключает способность сокета выполнять последующие функции
selectFD_CLR3. Когда завершается дочерний процесс, родительский процесс уведомляется об этом с помощью сигнала
SIGCHLDselectПричина, по которой дейтаграммный сервер должен завладевать сокетом, пока он не завершит работу, лишая тем самым демон
inetdselectinetdinetdselectinetdforkinetdinetdSIGCHLDПять стандартных служб Интернета, описанных в табл. 2.1, обеспечиваются самим демоном
inetdПоскольку функцию
acceptinetdinetdgetpeernameforkexecinetdgetpeernameДемон
inetdsendmailforkinetdforkexec13.6. Функция daemon_inetd
В листинге 13.3 показана функция
daemon_inetdinetdЛистинг 13.3. Функция daemon_inetd для придания свойств демона процессу, запущенному демоном inetd
//daemon_inetd.c1 #include "unp.h"2 #include <syslog.h>3 extern int daemon_proc; /* определено в error.c */4 void5 daemon_inetd(const char *pname, int facility)6 {7 daemon_proc = 1; /* для наших функций err_XXX() */8 openlog(pname, LOG_PID, facility);9 }Эта функция тривиальна по сравнению с
daemon_initinetddaemon_procopenlogdaemon_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);
