PHP принудительно закрывает (убивает) соединение - PullRequest
2 голосов
/ 26 января 2012

Я провел несколько тестов с сокетами (используя fsockopen() и stream_socket_client()) и cURL для принудительного закрытия соединения (TCP / HTTP).Тем не менее, не повезло.

Независимо от того, используется ли тайм-аут в 1 мс (для cURL для опции CURLOPT_TIMEOUT_MS требуется минимум 1 с в любом случае) или для выхода из соединения сразу после открытия с отключенной блокировкой, он все равно работает безупречно.

Я не пробовал разветвлять (pcntl_fork()) мой скрипт, но мой сервер все равно его не поддерживает.

Есть ли другой способ уничтожить соединение в PHP?Вызывает разочарование то, что вы не можете в PHP, а в C #: (


Редактировать: Позвольте мне уточнить мой вопрос, так как это может быть несколько запутанным:

Я хочу посмотреть, еслиPHP позволяет разработчикам отправлять SYN. ​​Вот и все. Один единственный пакет SYN с использованием собственных функций PHP.

Ответы [ 2 ]

2 голосов
/ 26 января 2012

Похоже, это связано с другим вопросом переполнения стека об отправке необработанных данных низкого уровня через PHP: Хотите вручную отправлять пакеты SYN ACK для установления соединения TCP (в PHP, если возможно)

Библиотека, упомянутая в ответе, была prnl , которая выполняет свою работу, но я пока что не слишком много играл с ней.Из описания:

PRNL - это библиотека PHP, предназначенная для выполнения сетевых задач низкого уровня.В этом первом выпуске мы начали с возможности передачи и приема необработанных IP-пакетов.С помощью PRNL вы можете создавать и передавать пользовательские IP-пакеты с совпадающими пакетами TCP и UDP.

Если вы используете PHP через Apache, вы обнаружите, что Apache уже установил соединениедо того, как ваш PHP сможет запустить.Я не уверен на данный момент, если у вас есть возможность вмешаться в рукопожатие в этот момент.

Если это не то, что вы ищете, пожалуйста, обновите вопрос, и я посмотрю, что ямогу найти, чтобы получить то, что вы ищете.

0 голосов
/ 26 января 2012

Вы пытались просто socket_close?

или exit() скрипт, если должен мгновенно закрыть соединение.

...