Имеется большое приложение, в котором используется cURL + OpenSSL для работы по протоколу HTTP.
Недавно обнаружена бага при работе на следующей конфигурации:
Сервер — IIS 7.5
Протокол HTTPS (TLSv1.0)
с клиента посылается большой файл через HTTP Request (Content-Type: application/xml; charset=utf-8)
И стала проявляться ошибка — происходит зависание.
Расследование показало, что в какой-то момент времени (после отправки примерно 7Мб данных) соединение перестает быть доступным для записи и случается зависание. Клиент периодически пытается дописать тело запроса в сокет, а сокет недоступен для записи (да и для чтения и исключений тоже недоступен). Сервер в это время ждет остатки тела запроса.
Когда это происходит — ошибок на сокете нет. Если тело запроса будет меньше 7 Мб — то все работает.
Если протокол HTTP — работает.
Если врезать прокси в виде Fiddler — работает
Если сервер поднять на Apache — работает.
Если использовать SSLv3 — работает.