wellwellСпасибо за ответ! С размером сообщения начинаю понимать. Но для защиты от такого я и подумал о том, чтобы сначала передавать размер сообщения, и если размер меня устраивает - то пропускать пакет, если нет - то не пускать. Хотя сейчас я уже понимаю, что ничто не мешает направить ложную длину сообщения... поэтому лучше действительно считывать пакет скажем по 512 байт и если размер получаемой структуры переваливает за установленную границу, то фильтровать такой пакет. Верно мыслю?
И еще вопрос - когда говорят о формировании пакета в рамках прикладного протокола - скажем того же IRC, то не имеется же в виду ручное формирование IP-пакета? Как я понял имеется в виду передача некой структуры данных, по типу такой:
type
TMyPacket = record
len : Integer; // длина сообщения
com : Byte; // таким вот образом как я понял реализуется индексация команда
msg : PChar; // а здесь собственно передаваемые данные
end;
Ла - и про индексацию команд. Так называемые human-readable протоколы сейчас актуальны? Или лучше провести соответствии между определенной командой и числовым значением?
По поводу утечки памяти - я освобождаю память после завершения работы потока - это корректно? По поводу send не понял - когда может вернуть не правильное число байт?