Книга: 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
присваивает прослушиваемому сокету динамически назначаемый порт.
- Слова благодарности
- 1.4.2.2. OSDL: Mobile Linux Initiative
- Состав сайта
- Предложения, которым недостает прямоты
- Поляризующий блок
- Другие интерфейсы программирования для Windows
- Законность спама
- 11.5. ПАО «ЛУКОЙЛ»
- Выводы для розничных магазинов
- Изучение среды международного маркетинга
- Приложение Словарь компьютерных терминов
- Немного о себе