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



         

Example.15-16.4 - часть 2


if((newsockfd = accept(sockfd,

(struct sockaddr *) &cliaddr, &clilen)) < 0){

perror(NULL);

close(sockfd);

exit(1);

}

/* В цикле принимаем информацию от клиента до

тех пор, пока не произойдет ошибки (вызов read()

вернет отрицательное значение) или клиент не

закроет соединение (вызов read() вернет

значение 0). Максимальную длину одной порции

данных от клиента ограничим 999 символами. В

операциях чтения и записи пользуемся дескриптором

присоединенного сокета, т. е. значением, которое

вернул вызов accept().*/

while((n = read(newsockfd, line, 999)) > 0){

/* Принятые данные отправляем обратно */

if((n = write(newsockfd, line,

strlen(line)+1)) < 0){

perror(NULL);

close(sockfd);

close(newsockfd);

exit(1);

}

}

/* Если при чтении возникла ошибка – завершаем работу */

if(n < 0){

perror(NULL);

close(sockfd);

close(newsockfd);

exit(1);

}

/* Закрываем дескриптор присоединенного сокета и

уходим ожидать нового соединения */

close(newsockfd);

}

}




Содержание  Назад  Вперед