• $fp = fsockopen("rnyTCPServer.wrox. com", 4567);
соединение с сокетом TCP, ожидающим на сервере myTCPServer. wrox. com на порту с номером 4567.
• $fp = fsockopen("udp://myUDPServer. wrox. com", 6789);
соединение с сокетом UDP, ожидающим на сервере myUDPServer.wrox.com на порту с номером 6789.
• $fp = fsockopen("/tmp/unixsocket456",0);
соединение с сокетом домена UNIX, обращение к которому идет по маршруту файловой системы /tmp/unixsocket456. При использовании сокетов доменов UNIX номер порта обязательно устанавливается в
Необязательные аргументы errno и errstr можно задавать во всех приведенных случаях для указания на сбойные ситуации, которые могут возникать при соединении с сокетом. errno задает номер ошибки, a errstr - текст сообщения об ошибке. Если errno возвращает 0, афункция возвращает false, значит, при инициализации сокета имели место неполадки.
Для сокетов TCP и UDP можно указать необязательный аргумент ti m e o ut, задающий количество секунд, в течение которого функция пытается установить соединение. Возврат значения false означает неуспех. Если вызов функции успешен, возвращается указатель на файл, который можно применять с функциями, позволяющими осуществлять чтение и запись по файловым указателям, такими как fgets() и fputs().
Функция pfsockopen() выполняет те же действия, что и fsockopen(), и принимает такие же аргументы. Единственная разница в том, что соединения, открытые fsockopen(), уничтожаются после завершения сценария, а соединения, открытые pfsockopenО, сохраняются даже после этого.
По отношению к функции pfsockopen() следует проявлять ту же осторожность, что и к другим сохраняющим соединение функциям, и даже несколько большую. Прежде всего, соединение будет постоянным только в том процессе, вкоторомАрасЬеоткрылсоединение. Еслипоследующийзапрособслужи- вается другим процессом Apache, необходимо вызвать эту функцию снова. Кроме того, вполне возможно, что логика работающего на сервере приложения не потерпит существование бездействующего соединения в течение слишком долгого времени и закроет его. Из этого следует, что нельзя быть полностью уверенным вдоступности соединения в любой момент времени.
socket_set_blocking()
int socket_set_blocking(int socket_descriptor, int mode)
Эта функция устанавливает или сбрасывает блокирующее состояние ввода/ вывода сокета. В первом аргументе указывается дескриптор сокета, а если второй аргумент имеет значение true, то сокет устанавливается как блокирующий. Если передать аргумент false, то сокет устанавливается как не блокирующий.