Во-первых, я не программист на C, а кодовая база OpenSSL огромна, поэтому простите меня за вопрос, на который я, вероятно, мог бы найти ответ, учитывая, что у меня было время и навыки, чтобы копаться в коде.
Насколько я могу судить, TLS работает поверх TCP. TCP ориентирован на поток, поэтому невозможно узнать, когда сообщение было доставлено. Вы должны заранее знать, какой длины должно быть входящее сообщение, или иметь разделитель для сканирования.
Имея это в виду, как OpenSSL может обработать запрос пульса до того, как будет получена вся полезная нагрузка?
Если OpenSSL просто начнет обрабатывать первую порцию данных, считанных из TCP-сокета после получения длины полезной нагрузки, то OpenSSL окажется не только небезопасным, но и неработоспособным при нормальной работе. Поскольку максимальный размер сегмента TCP составляет 536 байт, любая полезная нагрузка, превышающая этот размер, будет охватывать несколько сегментов TCP и, следовательно, потенциально охватывать несколько операций чтения сокетов.
Итак, вопрос: как/почему OpenSSL может начать обработку сообщения, которое еще не доставлено?