socket_select Запускает системный вызов select() для заданных массивов сокетов с указанным временем ожидания &reftitle.description; intfalsesocket_select arraynullread arraynullwrite arraynullexcept intnullseconds intmicroseconds0 socket_select принимает массивы сокетов и ждёт их изменения статуса. Те, кто знаком с сокетами BSD, обнаружат, что массивы сокетов на самом деле являются так называемыми наборами дескрипторов файлов. Наблюдаются три независимых массива ресурсов сокетов. &reftitle.parameters; read Сокеты, перечисленные в массиве read будут наблюдаться для просмотра, есть ли доступные символы для чтения ( точнее, чтобы видеть, не будет ли чтение блокироваться, в частности, сокет уже достиг конца файла, и в этом случае socket_read вернёт строку с нулевой длиной). write Сокеты, перечисленные в массиве write будут наблюдаться для просмотра, не будет ли запись блокироваться. except Сокеты, перечисленные в массиве except будут наблюдаться для исключений. seconds seconds и microseconds вместе образуют параметр timeout. Параметр timeout - максимальный промежуток времени до возврата socket_select. seconds может быть нулём, заставляя socket_select к немедленному возврату. Это полезно для опроса. Если seconds равен &null; (нет времени ожидания), socket_select может блокироваться бесконечно. microseconds При завершении массивы изменяются для обозначения, какой сокет на самом деле изменил статус. Не требуется передавать каждый массив в socket_select. Вы можете пропустить его и использовать пустой массив или &null; вместо этого. Также не забывайте, что эти массивы передаются по ссылке и будут изменены после завершения socket_select. Из-за ограничения текущего движка Zend невозможно передать модификатор константы, такой как &null;, непосредственно в качестве параметра в функцию, которая ожидает, что этот параметр будет передан по ссылке. Вместо этого используйте временную переменную или выражение, где левая сторона является временной переменной: Использование &null; в <function>socket_select</function> ]]> &reftitle.returnvalues; В случае успешного выполнения socket_select возвращает количество сокетов, содержащихся в изменённых массивах, которое может быть равно нулю, если время ожидания истечёт до того, как произойдёт что-то интересное. В случае возникновения ошибки возвращается &false;. Код ошибки может быть получен с помощью socket_last_error. Обязательно используйте оператор === при проверке на ошибку. Поскольку socket_select может возвращать 0, сравнение с == будет оцениваться как &true;: Анализ результата <function>socket_select</function> ]]> &reftitle.examples; Пример использования <function>socket_select</function> 0) { /* По крайней мере, в одном из сокетов произошло что-то интересное */ } ?> ]]> &reftitle.notes; Имейте в виду, что некоторые реализации сокетов необходимо обрабатывать очень осторожно. Несколько основных правил: Вы всегда должны попытаться использовать socket_select без времени ожидания. Ваша программа ничего не должна делать, если нет доступных данных. Код, зависящий от времени ожидания, обычно не очень переносим и труден для отладки. Сокет не должен добавляться к любому из массивов, если вы не собираетесь проверять результат после вызова socket_select. После возврата socket_select все сокеты во всех массивах должны быть проверены. Любой сокет, доступный для записи или чтения, должен использоваться для записи или чтения. Если вы читаете или записываете из сокета, возвращаемого в массивах, имейте в виду, что он необязательно сможет прочитать или записать полностью запрашиваемые вами данные. Будьте готовы прочитать или записать только один байт. Обычно для большинства реализаций сокетов единственное исключение, пойманное с помощью массива except - это данные без привязки, полученные в сокете. &reftitle.seealso; socket_read socket_write socket_last_error socket_strerror