Книга: UNIX: разработка сетевых приложений
3.10. Резюме
3.10. Резюме
Структуры адресов сокетов являются неотъемлемой частью каждой сетевой программы. Мы выделяем для них место в памяти, заполняем их и передаем указатели на них различным функциям сокетов. Иногда мы передаем указатель на одну из этих структур функции сокета, и она сама заполняет поля структуры. Мы всегда передаем эти структуры по ссылке (то есть передаем указатель на структуру, а не саму структуру) и всегда передаем размер структуры в качестве дополнительного аргумента. Когда функция сокета заполняет структуру, длина также передается по ссылке, и ее значение может быть изменено функцией, поэтому мы называем такой аргумент «значение-результат» (value-result).
Структуры адресов сокетов являются самоопределяющимися, поскольку они всегда начинаются с поля family
, которое идентифицирует семейство адресов, содержащихся в структуре. Более новые реализации, поддерживающие структуры адресов сокетов переменной длины, также содержат поле, которое определяет длину всей структуры.
Две функции, преобразующие IP-адрес из формата представления (который мы записываем в виде последовательности символов ASCII) в численный формат (который входит в структуру адреса сокета) и обратно, называются inet_pton
и inet_ntop
. Эти функции являются зависящими от протокола. Более совершенной методикой является работа со структурами адресов сокетов как с непрозрачными (opaque) объектами, когда известны лишь указатель на структуру и ее размер. Мы разработали набор функций sock_
, которые помогут сделать наши программы не зависящими от протокола. Создание наших не зависящих от протокола средств мы завершим в главе 11 функциями getaddrinfo
и getnameinfo
.
Сокеты TCP предоставляют приложению поток байтов, лишенный маркеров записей. Возвращаемое значение функции read может быть меньше запрашиваемого, но это не обязательно является ошибкой. Чтобы упростить считывание и запись потока байтов, мы разработали три функции readn
, writen
и readline
, которые и используем в книге. Однако сетевые программы должны быть написаны в расчете на работу с буферами, а не со строками.
- 3.1. Введение
- 3.2. Структуры адреса сокетов
- 3.3. Аргументы типа «значение-результат»
- 3.4. Функции определения порядка байтов
- 3.5. Функции управления байтами
- 3.6. Функции inet_aton, inet_addr и inet_ntoa
- 3.7. Функции inet_pton и inet_ntop
- 3.8. Функция sock_ntop и связанные с ней функции
- 3.9. Функции readn, writen и readline
- 3.10. Резюме
- Упражнения