Аргерих Л. О языке РНР. Часть 3. Страница 77


Функции, осуществляющие чтение из блокирующего сокета, ждут, пока в со- кете появятся данные для чтения. Если сокет не блокирующий, эти функции сразу выполняют возврат и сообщают о сбойной ситуации, когда данных нет.

socket_set_timeout()

boolean socket_set_timeout(int socket_descriptor, int seconds, int micros)

Эта функция устанавливает тайм-аут сокета с точностью до микросекунд. Первый аргумент передает дескриптор сокета, второй аргумент задает дли­тельность тайм-аута в секундах, а третий задает составляющую длительнос­ти тайм-аута в микросекундах и определяет, как долго сокет может оста­ваться открытым в отсутствие какого-либо ввода/вывода.

socket_read()

string socket_read(int socket_descriptor, int length [, int type])

С помощью этой функции можно осуществлять чтение из дескриптора соке- та, заданного первым аргументом. Аргумент length указывает, сколько байт надо прочесть.

Необязательный аргумент type может принимать значение PHP_NORMAL_READ или PHP_BINARY_READ. Если указан тип PHP_NORMAL_READ, операция чтения пре­кращается, как только встретится символ \п (перевод строки) или (возврат каретки). Если задан тип PHP_BINARY_READ, операция чтения продол­жается, пока не кончатся данные или не будет прочтено указанное коли­чество байт. В версии 4.0.6 отсутствие аргумента type равносильно указанию PHP NORMAL READ. Начиная с РНР4.1.0 аргумент type по умолчанию имеет зна­чение PHP_6INARY_READ. Функция возвращает прочитанные данные или FALSE, если произойдет ошибка.

socket_write()

int socket_write(int socket_descriptor, string &buffer, int length)

Эта функция дополняет функцию socket_read (). Она записывает байты из бу­фера, заданного вторым аргументом, в дескриптор сокета, заданный в пер­вом аргументе. Третий аргумент устанавливает количество байт, которое должно быть записано. Функция возвращает количество записанных байт или false, если произойдет ошибка.

socket_strerror()

string socket_strerror(int errno)

Номер ошибки, получаемый от функций сокетов, не сильно помогает по­нять, что произошло. Если передать номер ошибки в качестве аргумента функции socket_strerror(), то последняя возвращает строку со словесным описанием ошибки.

Приложение почтового клиента

В этом разделе мы разработаем приложение, в сущности, почтовый клиент, в котором применим знание API сокетов и механизм разрешения имен DNS. API DNS будет использован для получения информации об адресе почтового сервера, a API сокетов - для открытия соединения с ним и обмена данными с помощью почтового протокола SMTP. Пример преследует чисто иллюстра­тивные цели. Любое реальное приложение должно опираться на Mail API, представляющий собой часть дистрибутива РНР (см. рис. 13.3).




На сегодняшний день многие фирмы предлагают свои услуги по созданию сайтов. Но вам стоит обращаться только к лучшим и проверенным компаниям. Если вы хотите создание сайтов цены на которые ниже их качества, добро пожаловать на http://clever-as.ru.