UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
33 err_quit("tpi_connect: bad length from getmsg");34 switch (rcvbuf.type) {35 case T_OK_ACK:36 break;37 case T_ERROR_ACK:38 if (ctlbuf.len < (int)sizeof(struct T_error_ack))39 err_quit("tpi_connect: bad length for T_ERROR_ACK");40 error_ack = (struct T_error_ack*)&rcvbuf;41 err_quit("tpi_connect: T_ERROR_ACK from conn %d, %d)",42 error_ack->TLI_error, error_ack->UNIX_error);43 default:44 err_quit("tpi connect, unexpected message type: &d", rcvbuf.type);45 }46 ctlbuf.maxlen = sizeof(conn_con);47 ctlbuf.len = 0;48 ctlbuf.buf = (char*)&conn_con;49 flags = 0;50 Getmsg(fd, &ctlbuf, NULL, &flags);51 if (ctlbuf.len < (int)sizeof(long))52 err_quit("tpi_connect2: bad length from getmsg");53 switch (conn_con.msg_hdr.PRIM_type) {54 case T_CONN_CON:55 break;56 case T_DISCON_IND:57 if (ctlbuf.len < (int)sizeof(struct T_discon_ind))58 err_quit("tpi_connect2: bad length for T_DISCON_IND");59 discon_ind = (struct T_discon_ind*)&conn_con.msg_hdr;60 err_quit("tpi_connect2: T_DISCON_IND from conn (%d)",61 discon_ind->DISCON_reason);62 default:63 err_quit("tpi_connect2: unexpected message type. %d",64 conn_con.msg_hdr PRIM_type);65 }66 }18-26T_conn_reqstruct T_conn_req { long PRIM_type; /* T_CONN_REQ */ long DEST_length; /* длина адреса получателя */ long DEST_offset; /* смещение адреса получателя */ long OPT_length; /* длина параметров */ long OPT_offset; /* смещение параметров */ /* затем следуют адреса протокола и параметры соединения */};Как и в случае функции
tpi_bindconn_reqT_conn_reqconn_reqOPT_lengthOPT_offsetputmsgM_PROTO27-45getmsgT_OK_ACKT_ERROR_ACKT_primitivesgetmsgstruct T_ok_ack { long PRIM_type; /* T_OK_ACK */ long CORRECT_prim; /* корректный примитив */};46-65T_OK_ACKT_CONN_CONstruct T_conn_con { long PRIM_type; /* T_CONN_CON */ long RES_length; /* длина адреса собеседника */ long RES_offset; /* смещение адреса собеседника */ long OPT_length; /* длина параметра */ long OPT_offset; /* смещение параметра */ /* далее следуют адрес протокола и параметры собеседника */};Мы снова вызываем функцию
getmsgM_PROTOM_PCPROTOT_CONN_CONT_DISCON_INDstruct T_discon_ind { long PRIM_type; /* T_DISCON_IND */
