PHP SSL «старые» потоковые сокеты неожиданно закрываютсяPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 PHP SSL «старые» потоковые сокеты неожиданно закрываются

Сообщение Anonymous »


Я разрабатываю сервер веб-сокетов SSL, PHP 8.2.

Я без проблем принимаю SSL-соединения.

Проблема:

Принимаются соединение A, затем B, затем C, затем D.

Когда соединение C закрывается (отключение совершают клиенты, а не сервер), то соединения A и B неожиданно закрываются (но не D).

При выполнении операции "fread" в сокете потока A или B будет выдано следующее предупреждение: fread(): операция SSL не удалась с кодом 1. Сообщения об ошибках OpenSSL: ошибка: 140943FC: процедуры SSL: ssl3_read_bytes: предупреждение sslv3 о плохой записи Mac в....

Чтение через сокет D будет продолжаться.

Это происходит только при SSL-соединениях, а не при незашифрованных соединениях.

Фактически, все сокеты, открытые ДО закрывающегося сокета, также закрываются.

Пример моего кода:
$транспорт = 'tlsv1.3'; $ssl = ['ssl' => [ 'local_cert' => $sslCert, 'local_pk' => $sslKey, 'disable_compression' => true, 'verify_peer' => ложь, 'allow_self_signed' => правда, 'ssltransport' => $транспорт, ] ]; $context =stream_context_create($ssl); $socketS =stream_socket_server( 'ssl://0.0.0.0:'.$wssPort, $ошибка, $ошибка, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $контекст ); .... делать { $tCpy = массив ($socketS); $retSocket=stream_select($tCpy, $null, $null, 20, 0); если ($retSocket>0 ) { // Новое соединение stream_set_blocking($socketS, правда); $cliSocket =stream_socket_accept($socketS,5,$ip); ... $pid = pcntl_fork(); если ($pid>0) { // ХОРОШО echo("Вилка ок"); продолжать; } иначе, если ($pid < 0) { echo("Ошибка вилки"); продолжать; } Еще перерыв; } } Пока (истина); // Делаем что-нибудь с новым подключенным клиентом...
Есть идеи? Спасибо!
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»