Книга: UNIX: разработка сетевых приложений
Глава 4
Глава 4
4.1. Посмотрите на определение констант, начинающихся с INADDR_
, кроме INADDR_ANY
(состоит из нулевых битов) и INADDR_NONE
(состоит из единичных битов). Например, адрес многоадресной передачи класса D INADDR_MAX_LOCAL_GROUP
определяется как 0xe00000ff
с комментарием «224.0.0.255», что явно указывает на порядок байтов узла.
4.2. Приведем новые строки, добавленные после вызова connect
:
len = sizeof(cliaddr);
Getsockname(sockfd, (SA*)&cliaddr, &len);
printf("local addr: %sn",
Sock_ntop((SA*)&cliaddr, len));
Это требует описания переменной len
как socklen_t
, a cliaddr
как структуры struct sockaddr_in
. Обратите внимание, что аргумент типа «значение-результат» для функции getsockname(len)
должен быть до вызова функции инициализирован размером переменной, на которую указывает второй аргумент. Наиболее частая ошибка программирования при использовании аргументов типа «значение-результат» заключается в том, что про эту инициализацию забывают.
4.3. Когда дочерний процесс вызывает функцию close
, счетчик ссылок уменьшается с 2 до 1, так что клиенту не посылается сегмент FIN. Позже, когда родительский процесс вызывает функцию close
, счетчик ссылок уменьшается до нуля, и тогда сегмент FIN посылается.
4.4. Функция accept
возвращает значение EINVAL
, так как первый аргумент не является прослушиваемым сокетом.
4.5. Вызов функции listen
без вызова функции bind
присваивает прослушиваемому сокету динамически назначаемый порт.
- Chapter 5. Kernel Initialization
- Кто такая Елена Ивашенцева?
- 11.2. Цели процесса
- Рис. 214. Имена почтовых серверов.
- Document
- ГЛАВА 3 Внутренняя структура .NET Compact Framework
- Джордж Буль Отец булевой алгебры
- Removable Storage Media
- Работа пользователей с виртуальной машиной
- 6.5. Общие команды меню Windows-программ. Буфер обмена Windows
- Ассортимент
- 6.3 Native Application Builder (NAB)