Я пишу простую клиентскую библиотеку telnet. Я открываю сокеты, используя fsockopen(), и читаю и пишу в сокет, используя fgetc() и fwrite(). Я использую fgetc() вместо fread() для обработки специальных команд Telnet и таких параметров, как (IAC, ...).читать все данные, полученные из сокета в PHP
Проблема в том, что большую часть времени, которую я читаю из сокета, требуется слишком долго, чтобы вернуться. как я его профилировал, это займет столько же времени, сколько время соединения, и после этого у меня есть результаты.
вот мой метод чтения:
protected function getChar()
{
$char = fgetc($this->_socket);
return $char;
} // public function getChar()
В настоящее время я использую это условие, чтобы убедиться, что поток завершен:
$char = $this->getChar();
if ($char === false) {
// end of the stream.
}
есть ли другой способ, чтобы узнать, что поток закончил все данные прочитаны?
Udate: Я думаю, что символ EOF в протоколе Telnet не является тем, что PHP ожидает как EOF, поэтому сценарий не может найти конец потока. Кто-нибудь знает, что такое символ EOF (конец файла) в протоколе Telnet?
Является ли сеансом telnet полным или полудуплексом? –
Я не уверен. как я могу узнать? – farzad