Я работаю над книгой Ричарда Стивенса Сетевое программирование UNIX, том 1, и пытаюсь написать эхо-клиент TCP, использующий протокол Telnet. Я все еще нахожусь на ранних стадиях и пытаюсь написать функции чтения и записи.
Я хотел бы написать его для использования мультиплексирования ввода-вывода и функции Select, потому что он должен быть многоклиентским, и я не хочу пытаться заниматься изучением потоков C++, пока я пытаюсь изучить библиотеку Berkeley Sockets. в то же время. В конце главы о мультиплексировании ввода-вывода Стивенс имеет небольшой раздел об атаках DOS, где он говорит, что метод, который я планировал использовать, уязвим для атак DOS, которые просто отправляют один байт после соединения, а затем зависают. После этого он упоминает 3 возможных решения: неблокирующий ввод-вывод, многопоточность (выход) и установка тайм-аута для операций ввода-вывода.
Мой вопрос в том, есть ли другие способы избежать такой атаки? А если нет, то какой из них лучше? Я просмотрел раздел об установлении тайм-аута для операций, но это не похоже на то, что я хочу делать. Методы, которые он предлагает для этого, выглядят довольно сложными, и я не уверен, как превратить их в то, что у меня уже есть. Я только взглянул на главу о NIO, похоже, это то, что нужно сделать прямо сейчас, но я хотел бы посмотреть, есть ли какие-либо другие способы обойти это, прежде чем я потрачу еще пару часов на изучение главы.
Любые идеи?