Хотя сейчас аргумент AF_UNIX поддерживается в версиях РНР для Microsoft Windows, в РНР 4.0.6 он работает неправильно, и чтобы повысить переносимость кода, его следует по возможности избегать. Аргумент type задает уровень взаимодействующего протокола, например определяет, взаимодействует ли протокол с уровнем IP или с транспортным уровнем. Он также определяет механизм передачи пакетов, т. е. будет ли связь потоковой или без установления соединения. Перечень возможных значений приводится в табл. 13.2:
Не все сочетания аргумента domain с аргументом type имеют смысл. Например, не имеет смысла указывать AF_UNIX в качестве первого аргумента и S0CK_RAW, т. к. потоковый протокол UNIX не имеет отношения к уровню IP.
Начиная с версии РНР4.1.0 наименования и списки параметров некоторых функций, работающих с сокетами, изменились. В данном переводе, в отличие от оригинального издания, мы прилагаем функции в той нотации, в которой они присутствуют в новом socket API в РНР. Код примеров также переработан в соответствии с новым socket API. — Примеч. науч. ред.
Для разрешения неоднозначности некоторых комбинаций есть третий аргумент. Поскольку третий аргумент в РНР «недореализован» и в большинстве случаев значение 0 действует, безопаснее всего его и указывать.
Функция возвращает целое число, представляющее дескрип
тор сокета, с которым можно проводить операции чтения/записи. Если возвращается отрицательное число, это указывает на ошибку. Его можно передать функции socket_strerror(), возвращающей строку с сообщением, описывающим ошибку.
socket_bind()
int socketJ)ind(int socket, string address [, int port])
При создании сокета на сервере необходимо привязать его к IP-адресу и хорошо известному порту. Функция socket_bind() принимает в качестве первого аргумента дескриптор сокета, а в качестве второго - локальный адрес, являющийся адресом IP (в случае если дескриптор сокета был создан для семейства протоколов AF_INET). Если сокет был создан для семейства протоколов AFJJNIX, то первый аргумент задает путь UNIX, ведущий к фактическому доменному сокету UNIX.
Аргумент ро rt действует только в случае AF_INET и задает порт, к которому должен привязаться сервер. Если порт уже занят другой службой, выполнение функции socket_bind() завершается неудачей. Если возвращается отрицательное значение, это указывает на ошибку, текстовое описание которой можно получить, передав это число в качестве аргумента функции socket_st г error ().