Эта общая тема возникла раньше, здесь , здесь , здесь , и, без сомнения, в других местах в Интернете. В моем случае, в отличие от них, зависание происходит из-за блокирующего сокета, который никогда не получает сообщение, и, возможно, именно поэтому описанные там решения не сработали для меня. Я разрабатываю в тандеме приложение C ++, которое связывается со скриптом php через локальное соединение с сокетом, и когда приложение C ++ падает, оно оставляет сокет скрипта php в ожидании сообщения, которое никогда не приходит. Я пытался использовать session_destroy и session_unset (вызывая их сначала в скрипте перед session_start), но они не работают; даже выход и перезапуск браузера не помогают. Я могу остановить сеанс, только если удаляю session_start, перезагружаю скрипт и затем заканчиваю сеанс через клиента. Как я могу убить сеанс, не проходя через это?
Edit: я забыл упомянуть, я также пытался тайм-аут сокета с
socket_set_option($socket,0, SO_RCVTIMEO, array("sec"=>1, "usec"=>0));
Но я получил ошибку «недопустимая операция», и она не сработала.
Редактировать 2: установка ручного тайм-аута, следуя подсказке здесь , работала достаточно хорошо. Я до сих пор не знаю, как вообще убить сеанс, например, застрял в бесконечном цикле, ну да ладно.