Основы операционных систем. Практикум


Example.15-16.4


/* Пример простого TCP-сервера для сервиса echo */

#include

#include

#include

#include

#include

#include

#include

#include

void main()

{

int sockfd, newsockfd; /* Дескрипторы для

слушающего и присоединенного сокетов */

int clilen; /* Длина адреса клиента */

int n; /* Количество принятых символов */

char line[1000]; /* Буфер для приема информации */

struct sockaddr_in servaddr, cliaddr; /* Структуры

для размещения полных адресов сервера и

клиента */

/* Создаем TCP-сокет */

if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){

perror(NULL);

exit(1);

}

/* Заполняем структуру для адреса сервера: семейство

протоколов TCP/IP, сетевой интерфейс – любой, номер

порта 51000. Поскольку в структуре содержится

дополнительное не нужное нам поле, которое должно

быть нулевым, побнуляем ее всю перед заполнением */

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family= AF_INET;

servaddr.sin_port= htons(51000);

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

/* Настраиваем адрес сокета */

if(bind(sockfd, (struct sockaddr *) &servaddr,

sizeof(servaddr)) < 0){

perror(NULL);

close(sockfd);

exit(1);

}

/* Переводим созданный сокет в пассивное (слушающее)

состояние. Глубину очереди для установленных

соединений описываем значением 5 */

if(listen(sockfd, 5) < 0){

perror(NULL);

close(sockfd);

exit(1);

}

/* Основной цикл сервера */

while(1){

/* В переменную clilen заносим максимальную

длину ожидаемого адреса клиента */

clilen = sizeof(cliaddr);

/* Ожидаем полностью установленного соединения

на слушающем сокете. При нормальном завершении

у нас в структуре cliaddr будет лежать полный

адрес клиента, установившего соединение, а в

переменной clilen – его фактическая длина. Вызов

же вернет дескриптор присоединенного сокета, через

который будет происходить общение с клиентом.

Заметим, что информация о клиенте у нас в

дальнейшем никак не используется, поэтому

вместо второго и третьего параметров можно

было поставить значения NULL. */




Начало  Назад  Вперед



Книжный магазин