Intereting Posts
Как остановить FluentPDO неправильно, указав имя таблицы как я могу запускать задания cron с PHP? Поиск PHP через вложенный массив для удаления элемента по имени Существует ли $ _SERVER в PHP или нет? Найти последнюю итерацию петли foreach в ларавельном лезвии stop click () из события на созданном ajax входе Почему я получаю 500 ошибок при использовании file_get_contents (), но работает в браузере? Интерфейс или абстрактный класс: какой из них использовать? Как я могу тестировать контроллер Symfony2? как отобразить список имен таблиц базы данных в codeigniter jQuery-токен-вход не обрабатывает междоменные результаты codeigniter простая проверка входа не работает NetBeans неправильно сохраняет код (все в одной строке с квадратами, где должны быть разрывы строк) Twig Append Content to Block Присвоение информации о публикации WordPress массиву PHP и присвоение значения массива php массиву javascript ДЛЯ ЭТОГО ПРИЧИНА

получить строку ошибки сокета при сбое асинхронного подключения

кто-нибудь знает, может ли его получить некоторую информацию об ошибке (например, getsockopt SO_ERROR в C), если асинхронное соединение, например, следующее: btw: im не использует потоки причин расширения сокета, предоставляет оболочку ssl

<?php $ctx = stream_context_create(); stream_context_set_params($ctx, array("notification" => "stream_notification_callback")); $destination = "tcp://92.247.12.242:8081"; $socket = stream_socket_client($destination, $errno, $errstr, 10, STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT, $ctx);a // plain socket var_dump($socket); // no error as expected var_dump($errno); var_dump($errstr); stream_set_blocking($socket, false); /* Prepare the read array */ $read = array($socket); $write = array($socket); $except = NULL; if (false === ($num_changed_streams = stream_select($read, $write, $except, 10))) { var_dump("select failed?"); /* Error handling */ } elseif ($num_changed_streams > 0) { /* At least on one of the streams something interesting happened */ var_dump("event"); // read fails, so the connect fails but why? $result = stream_socket_recvfrom($socket, 1024); var_dump($result); // no error again var_dump($errno); var_dump($errstr); // nothing interesting var_dump(stream_get_meta_data($socket)); } // wont get called function stream_notification_callback($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) { $args = func_get_args(); var_dump($args); } 

спасибо

Related of "получить строку ошибки сокета при сбое асинхронного подключения"

У меня такая же проблема, как описано. Я нашел немного обходного пути:

Я переношу каждый из моих «потоков» в класс Stream и устанавливаю свойство тайм-аута. Прежде чем я вызову connect, я создаю отметку времени, когда должен произойти тайм-аут. Затем у меня есть цикл в классе Manager который вызывает stream_select() .

Успешные соединения помещаются в массив $write . У меня есть другой вызов в нижней части цикла, который вызывает $stream->checkTimeout() . Внутри этого есть вызов tv_sec stream_select() с 0, установленным для tv_sec и tv_usec . Если $ this-> conn не появляется в $write , я предполагаю, что он был исчерпан.

Насколько я понимаю, ошибки в потоковых функциях должны генерировать предупреждающие сообщения PHP. Я думаю, что единственный способ – поймать их с помощью set_error_handler () и обработать их там.

Я столкнулся с этим вопросом. Решение, которое я нашел, это использовать stream_socket_get_name . Если вы хотите, чтобы все это было завершено в хорошей библиотечной проверке http://drupal.org/project/httprl . Он по-прежнему требует drupal, но в основном для настроек и обработки ошибок; вы можете немного изменить код, и он должен работать сам по себе.