Шрифт:
После того, как сервер получил сообщение от функции
Установленное соединение удаляется из очереди, и мы предполагаем, что не существует никаких других установленных соединений.
Сервер вызывает функцию
Сервер останется блокированным в вызове функции
Проблема в некоторой степени аналогична проблеме, называемой атакой типа «отказ в обслуживании», описанной в разделе 6.8. Однако в данном случае сервер выходит из состояния блокировки, как только другой клиент установит соединение.
Чтобы решить эту проблему, нужно соблюдать два следующих правила:
1. Всегда делать прослушиваемый сокет неблокируемым, если мы используем функцию
2. Игнорировать следующие ошибки, возникающие при повторном вызове функции
16.7. Резюме
В примере неблокируемого чтения и записи в разделе 16.2 использовался наш клиент
Неблокируемая функция
Упражнения
1. Обсуждая листинг 16.6, мы отметили, что родительский процесс должен вызвать функцию
2. Что произойдет в листинге 16.6, если процесс сервера завершится преждевременно и дочерний процесс получит признак конца файла, но не уведомит об этом родительский процесс?
3. Что произойдет в листинге 16.6, если родительский процесс непредвиденно завершится до завершения дочернего процесса, и дочерний процесс затем считает конец файла на сокете?
4. Что произойдет в листинге 16.7, если мы удалим следующие две строки:
5. В разделе 16.3 мы сказали, что возможна ситуация, когда данные для сокета придут раньше, чем завершится функция
Глава 17
Операции функции ioctl
17.1. Введение
Функция
В этой главе представлен обзор команд функции
Обычно сетевые программы (как правило, серверы) используют функцию