Я пишу прокси-сервер, который проксирует SSL-соединения, и все работает отлично для обычного трафика. Однако, когда есть большая передача файлов (Anything over 20KB), такая как вложение электронной почты, соединение восстанавливается на уровне TCP до того, как файл будет записан. Я использую неблокирующий IO, и я создаю поток для каждого конкретного соединения.Как обрабатывать соединение SSL преждевременное закрытие
Когда соединение приходит мне сделать следующее:
- нерест нить
- Подключение к клиенту (незашифрованном) и прочитать запрос на соединение (все остальные запросы игнорируются)
- Создать безопасное соединение (SSL с помощью openssl api) на сервер
- Сообщите клиенту, что мы связались с сервером (незашифрованным)
- Создайте защищенное соединение с клиентом и начните проксирование данных между два с использованием цикла выбора, чтобы определить, когда могут произойти чтение и запись.
- После того, как базовые сокеты будут закрыты или произойдет ошибка, соединение будет закрыто, а поток будет завершен.
Как я уже сказал, это отлично подходит для данных обычного размера (обычные веб-страницы и т. Д.), Но не удается, как только файл слишком велик с кодом ошибки (в зависимости от используемого веб-приложения) или Ошибка: соединение прерывается.
Я понятия не имею, что вызывает закрытие соединения, независимо от того, что это TCP, HTTP или SSL, и я не могу найти никакой информации об этом вообще. В некоторых браузерах он начнет работать, если я поставлю оператор сна сразу после SSL_write, но это, похоже, вызывает другие проблемы в других браузерах. Сон не должен быть длинным, на самом деле просто задержка. В настоящее время у меня установлено 4 мс на запись и 2 мс на чтение, и это полностью исправляет его в старых firefox, хром с HTTP-загрузками и опера.
Любые провода будут оценены и дайте мне знать, если вам нужна дополнительная информация. Заранее спасибо!
-Sam
Думаю, вам нужно будет опубликовать код, чтобы продемонстрировать проблему. – caf 2010-12-08 04:06:05