UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
7 sockfd = Socket(AF_LOCAL, SOCK_STREAM, 0); 8 bzero(&servaddr, sizeof(servaddr)); 9 servaddr sun_family = AF_LOCAL;10 strcpy(servaddr.sun_path, UNIXSTR_PATH);11 Connect(sockfd, (SA*)&servaddr, sizeof(servaddr));12 str_cli(stdin, sockfd); /* выполняет всю работу */13 exit(0);14 }6sockaddr_un7socketAF_LOCAL8-10AF_LOCALsun_path12str_cli15.6. Клиент и сервер дейтаграммного доменного протокола Unix
Теперь мы перепишем наши клиент и сервер UDP из разделов 8.3 и 8.5 с использованием сокетов. В листинге 15.5 показан сервер, который является модификацией листинга 8.1.
Листинг 15.5. Эхо-сервер дейтаграммного доменного протокола Unix
//unixdomain/unixdgserv01.c 1 #include "unp.h" 2 int 3 main(int argc, char **argv) 4 { 5 int sockfd; 6 struct sockaddr_un servaddr, cliaddr; 7 sockfd = Socket(AF_LOCAL, SOCK_DGRAM, 0); 8 unlink(UNIXDG_PATH); 9 bzero(&servaddr, sizeof(servaddr));10 servaddr.sun_family = AF_LOCAL;11 strcpy(servaddr.sun_path, UNIXDG_PATH);12 Bind(sockfd, (SA*)&servaddr, sizeof(servaddr));13 dg_echo(sockfd, (SA*)&cliaddr, sizeof(cliaddr));14 }6sockaddr_un7socketAF_LOCAL8-12UNIXDG_PATHunp.h/tmp/unix.dgunlinkbindunlink13dg_echoВ листинге 15.6 представлен эхо-клиент дейтаграммного доменного протокола Unix. Это модификация листинга 8.3.
Листинг 15.6. Эхо-клиент дейтаграммного доменного протокола Unix
//unixdomain/unixdgcli01.с 1 #include "unp.h" 2 int 3 main(int argc, char **argv) 4 { 5 int sockfd; 6 struct sockaddr_un cliaddr, servaddr; 7 sockfd = Socket(AF_LOCAL, SOCK_DGRAM, 0); 8 bzero(&cliaddr, sizeof(cliaddr)); /* связывание сокета с адресом */ 9 cliaddr.sun_family = AF_LOCAL;10 strcpy(cliaddr.sun_path, tmpnam(NULL);11 Bind(sockfd, (SA*)&cliaddr, sizeof(cliaddr));12 bzero(&servaddr, sizeof(servaddr)); /* заполняем структуру адреса сокета сервера */13 servaddr.sun_family = AF_LOCAL;14 strcpy(servaddr.sun_path, UNIXDG_PATH);15 dg_cli(stdin, sockfd, (SA*)&servaddr, sizeof(servaddr));16 exit(0);17 }6sockaddr_un7socketAF_LOCAL8-11bindtmpnambindrecvfromdg_echosendto
