UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
exit(main(argc, argv));
Следовательно, вызывается функция
exit
Глава 15
15.1. Функция
unlink
connect
connect
unlink
15.2. Клиент не сможет соединиться с сервером с помощью функции
connect
connect
15.3. При выводе адреса протокола клиента путем вызова функции
sock_ntop
datagram from (no pathname bound)
Одним из решений является проверить доменный сокет Unix в функциях
udp_client
udp_connect
bind
15.4. Даже если мы заставим сервер вернуть в функции
write
sleep
read
read
Чтобы использовать доменные протоколы Unix, запускаем клиент и сервер с двумя аргументами командной строки
/lосаl
/unix
/tmp/daytime
read
Поскольку для каждой функции
send
MSG_EOR
read
MSG_EOR
mbuf
MSG_EOR
mbuf
mbuf
MSG_EOR
mbuf
read
MSG_EOR
read
recvmsg
MSG_EOR
msg_flags
recvmsg
MSG_EOR
mbuf
15.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 int
15 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 else
27 do_parent();
28 exit(0);
29 }
30 void
31 parent_alrm(int signo)
32 {
33 return; /* прерывание блокированной функции connect() */
34 }