Книга: UNIX: разработка сетевых приложений
Глава 1
Глава 1
1.3. В операционной системе Solaris получаем:
solaris % daytimetcpcli 127.0.0.1
socket error: Protocol not supported
Для получения дополнительной информации об этой ошибке сначала используем программу grep
, чтобы найти строку Protocol not supported
в заголовочном файле <sys/errno.h>
.
solaris % grep 'Protocol not supported' /usr/include/sys/errno.h
#define EPROTONOSUPPORT 120 /* Protocol not supported */
Это значение errno
возвращается функцией socket
. Далее смотрим в руководство пользователя:
solaris % man socket
В большинстве руководств пользователя в конце под заголовком «Errors» приводится дополнительная, хотя и лаконичная информация об ошибках.
1.4. Заменяем первое описание на следующее:
int sockfd, n, counter = 0;
Добавляем оператор
counter++;
в качестве первого оператора цикла while
. Наконец, прежде чем прервать программу, выполняем
printf("counter = %dn", counter);
На экран всегда выводится значение 1.
1.5. Объявим переменную i типа int и заменим вызов функции write
на следующий:
for (i = 0; i < strlen(buff); i++)
Write(connfd, &buff[i], 1);
Результат зависит от расположения клиентского узла и узла сервера. Если клиент и сервер находятся на одном узле, счетчик обычно равен 1. Это значит, что даже если сервер выполнит функцию write
26 раз, данные будут возвращены за одну операцию считывания (read
). Но если клиент запущен в Solaris 2.5.1, а сервер в BSD/OS 3.0, счетчик обычно равен 2. Просмотрев пакеты Ethernet, мы увидим, что первый символ отправляется в первом пакете сам по себе, а следующий пакет содержит остальные 25 символов. (Обсуждение алгоритма Нагла в разделе 7.9 объясняет причину такого поведения.)
Цель этого примера — продемонстрировать, что разные реализации TCP по-разному поступают с данными, поэтому наше приложение должно быть готово считывать данные как поток байтов, пока не будет достигнут конец потока.
- Взаимодействие с устройствами
- Вопросы, которые вы должны задать, и вещи, которые обязаны сделать
- Определение проекта
- Embedded Linux development using Eclipse
- Андрей Николаевич Колмогоров
- Элементы
- Что к чему в новом модуле
- Дайте мне повод подписаться
- Повреждение жесткого диска
- Определение брендинга
- Разработка программ обучения продажам
- Заголовки