UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
exit(main(argc, argv));Следовательно, вызывается функция
exitГлава 15
15.1. Функция
unlinkconnectconnectunlink15.2. Клиент не сможет соединиться с сервером с помощью функции
connectconnect15.3. При выводе адреса протокола клиента путем вызова функции
sock_ntopdatagram from (no pathname bound)Одним из решений является проверить доменный сокет Unix в функциях
udp_clientudp_connectbind15.4. Даже если мы заставим сервер вернуть в функции
writesleepreadreadЧтобы использовать доменные протоколы Unix, запускаем клиент и сервер с двумя аргументами командной строки
/lосаl/unix/tmp/daytimereadПоскольку для каждой функции
sendMSG_EORreadMSG_EORmbufMSG_EORmbufmbufMSG_EORmbufreadMSG_EORreadrecvmsgMSG_EORmsg_flagsrecvmsgMSG_EORmbuf15.5. В листинге Д.7 приведена реализация данной программы.
Листинг Д.7. Определение фактического количества собранных в очередь соединений для различных значений аргумента backlog
//debug//backlog.c 1 #include "unp.h" 2 #define PORT 9999 3 #define ADDR "127 0.0.1" 4 #define MAXBACKLOG 100 5 /* глобальные переменные */ 6 struct sockaddr_in serv; 7 pid_t pid; /* дочерний процесс */ 8 int pipefd[2]; 9 #define pfd pipefd[1] /* сокет родительского процесса */10 #define cfd pipefd[0] /* сокет дочернего процесса */11 /* прототипы функций */12 void do_parent(void);13 void do_child(void);14 int15 main(int argc, char **argv)16 {17 if (argc != 1)18 err_quit("usage: backlog");19 Socketpair(AF_UNIX, SOCK_STREAM, 0, pipefd);20 bzero(&serv, sizeof(serv));21 serv.sin_family = AF_INET;22 serv.sin_port = htons(PORT);23 Inet_pton(AF_INET, ADDR, &serv.sin_addr);24 if ((pid = Fork()) == 0)25 do_child();26 else27 do_parent();28 exit(0);29 }30 void31 parent_alrm(int signo)32 {33 return; /* прерывание блокированной функции connect() */34 }
