Можно ли выполнить условие $var===false, если переменная $var другого типа (не boolean)?

Max1

Новичок
Сокет-сервер, использующий скрипт на PHP под Linux, разрывает соединение со стороны сервера, если для данных $input, полученных с клиента, выполняется условие $input===false Если соединение с клиента происходит через модем, при закрытии соединения на клиенте с помощью команды AT^SISC=0 сервер получает данные, равные значению false в PHP, и закрывает соединение со стороны сервера. Если соединение происходит с помощью клиента на C#, при закрытии соединения клиентом сервер не получает значения false, не закрывает соединение, если оно закрывается по условию $input===false, и пытается читать пустые строки с клиента. Для пустой строки $input это условие не выполняется. Соединение можно закрывать по другому условию, например, при получении другой определенной строки.
Вопрос не о сетях, а о том, можно ли, чтобы не менять условие закрытия соединения на сервере, отправив определенные байты с клиента, получить на сервере значение, соответствующее условию $input===false? В чем отличие значения false на PHP от пустой строки, и можно ли получить true, сравнивая false с данными другого типа, например, строкой или байтом, с помощью оператора === Он проверяет тождество типов, но каким-то образом при получении данных с клиента, который использует модем, условие сравнения выполняется. Клиент на C# отправляет данные в виде массива байт.
 

Max1

Новичок
Выяснил, что значение false на сервере возвращает функция socket_read, когда модем на клиенте закрывает соединение. По этому условию закрывается соединение на сервере. Сначала неправильно понял, что отправляются данные с клиента, которые сервер воспринимает как значение false типа boolean. При закрытии соединения через сетевую карту клиентом на C# функция socket_read не возвращает значение false и продолжает пытаться читать пустые строки с клиента, так как не возвращается значение false, и сервер не закрывает соединение по этому условию. С функцией socket_recv такая же ситуация.
Вопрос в том, как корректно отслеживать закрытие соединения с клиента на C#.
 

Max1

Новичок
Нашел информацию, что вместо:
if($input === false) socket_shutdown($client);
рекомендуют выполнять проверку:
if(($input === false) || ($input === '')) socket_shutdown($client);
Сообщается, что вызов функции $input = socket_read($client, $length); при закрытии соединения на клиенте может возвращать как false, так и пустую строку. У меня это зависит от клиента. Пока соединение на клиенте открыто, в логах сервера не нашел пустых строк, полученных с клиента. Поэтому соединение чаще, чем надо, закрываться на сервере не должно. Сделаю проверку на false и пустую строку и протестирую.
 

AnrDaemon

Продвинутый новичок
Нет. Пустая строка возвращается при пустом чтении, например, из неблокирующего сокета.
 
Сверху