LINUX.ORG.RU

История изменений

Исправление HighMan, (текущая версия) :

Поверх openssl написано очень много кода. Шансы, что SSL_read/SSL_write падают, когда в сокете 0 байт (внезапно, это любой EOF), скажем так, весьма призрачны. Я бы проверил для начала, что нигде по ошибке не зовется SSL_shutdown.

Точно, что ни кто и ни где никаких SSL_shutdown или SSL_free не вызывает.

Клиента пишу снова я, причем на Python :)

Вернее я ещё сразу пишу несколько функций, которые будут вызываться во Flask.

У меня на 2х мониторах 2 vscode. На одном сишный код, а другом питоновский. Обоих запускаю в режиме отладки и через Shift+F5 убиваю клиента.

После убийства клиента, на сервер летит пакет нулевой длинны, означающий закрытие соединения со стороны клиента, но, видимо, пакет нулевой длинны, означает закрытие на уровне сокетов, а TLS пакет, закрытия соединения, физически имеет иной размер, и когда SSL_read ловит нулевой пакет, то крашится.

Возможна и другая ситуация. В теории.

TLS/SSL надстройка над socket и его же использует. Когда крашится клиент, то на сервер летит нулевой пакет для socket! Socket ловит этот пакет и закрывает соединение, а вот SSL о прекращении соединения ни сном не духом и пытается что-то дальше мутить с соединением, которого уже нет.

Это я просто теоретезирую.

Вообще, понять причину крашей оказалась задача вовсе не тривиальная. Как понять по какой причине SSL_read крашит весь процесс при верных значениях параметров?

Исходная версия HighMan, :

Поверх openssl написано очень много кода. Шансы, что SSL_read/SSL_write падают, когда в сокете 0 байт (внезапно, это любой EOF), скажем так, весьма призрачны. Я бы проверил для начала, что нигде по ошибке не зовется SSL_shutdown.

Точно, что ни кто и ни где никаких SSL_shutdown или SSL_free не вызывает.

Клиента пишу снова я, причем на Python :)

Вернее я ещё сразу пишу несколько функций, которые будут вызываться во Flask.

У меня на 2х мониторах 2 vscode. На одном сишный код, товара а другом Пиотровский. Обоих запускаю в режиме отладки и через Shift+F5 убиваю клиента.

После убийства клиента, на сервер летит пакет нулевой длинны, означающий закрытие соединения со стороны клиента, но, видимо, пакет нулевой длинны, означает закрытие на уровне сокетов, а TLS пакет, закрытия соединения, физически имеет иной размер, и когда SSL_read ловит нулевой пакет, то крашится.

Возможна и другая ситуация. В теории.

TLS/SSL надстройка над socket и его же использует. Когда крашится клиент, то на сервер летит нулевой пакет для socket! Socket ловит этот пакет и закрывает соединение, а вот SSL о прекращении соединения ни сном не духом и пытается что-то дальше мутить с соединением, которого уже нет.

Это я просто теоретезирую.

Вообще, понять причину крашей оказалась задача вовсе не тривиальная. Как понять по какой причине SSL_read крашит весь процесс при верных значениях параметров?