PHP принудительно закрывает (убивает) соединение
Я провел несколько тестов с сокетами (используя fsockopen()
и stream_socket_client()
) и свернулся, чтобы принудительно закрыть соединение (TCP/HTTP). Однако, не повезло.
Независимо от того, использую ли я тайм-аут в 1 мс (для параметра CURLOPT_TIMEOUT_MS в любом случае требуется минимум 1 с) или прекращаю соединение сразу после его открытия с отключенной блокировкой, оно все равно работает безупречно.
Я не пробовал разветвлять (pcntl_fork()
) свой скрипт, но мой сервер все равно его не поддерживает.
Есть ли какой-нибудь другой способ убить подключение на PHP? Это очень разочаровывает, что вы не можете на PHP, в то время как можете на C#:(
Редактировать: Позвольте мне уточнить мой вопрос, поскольку он может быть несколько запутанным:
Я хочу посмотреть, позволяет ли PHP разработчикам отправлять SYN. Это все. Один, единственный, пакет SYN с использованием собственных функций PHP.
2 answers
Похоже, это связано с другим вопросом переполнения стека об отправке необработанных данных низкого уровня через PHP: Хотите вручную отправлять пакеты SYN ACK для установления TCP-соединения (если возможно, на PHP)
Библиотека, упомянутая в ответе, была prnl, которая выполняет свою работу, но я еще не играл с ней слишком сильно. Из описания:
PRNL - это библиотека PHP, предназначенная для выполнения сетевых задач низкого уровня. В этом первом выпуске мы начали с возможность передачи и приема необработанных IP-пакетов. С помощью PRNL вы можете создавать и передавать пользовательские IP-пакеты с соответствующими пакетами TCP и UDP.
Если вы используете PHP через Apache, то вы обнаружите, что Apache уже установил соединение до того, как ваш PHP сможет запуститься. На данный момент я не уверен, есть ли у вас возможность вмешаться в рукопожатие в этот момент.
Если это не то, что вы ищете, пожалуйста, обновите вопрос и Я посмотрю, что смогу найти, чтобы дать вам то, что вы ищете.
Вы пытались просто socket_close
?
Или exit()
сценарий, если он должен мгновенно закрыть соединение.