тов, сначала создают объект сокета, означающий структуру данных, с помощью которой клиент может обращаться к соединению. После этого клиент пытается соединиться с сервером, используя IP-адрес и хорошо известный порт. На этапе соединения библиотека создает некий эфемерный порт, невидимый клиенту. После того как соединение успешно установлено, клиент выполняет с сокетом операции чтения-записи. Закончив эти операции, он закрывает сокет.
Программа сервера в общем случае создает сокет и ассоциирует его с IP-ад- ресом хоста, на котором она выполняется, и его хорошо известным портом,
осуществляя свою привязку к этому адресу и порту. Затем она ждет на этом сокете входящих соединений, и когда поступает запрос соединения, он принимается, после чего с сокетом выполняются операции чтения и записи. При завершении работы сервера созланное соединение закрывается.
Сокеты и РНР
РНР предоставляет многочисленные функции, составляющие интерфейс сокетов. В целом они совершенно аналогичны API сокетов, предоставляемым другими операционными системами и платформами, что облегчает перенос имеющегося кода в РНР. В данном разделе мы рассматриваем различные функции сокетов, которые предоставляет РНР. Чтобы работать с функциями сокетов, надо скомпилировать РНР с параметром --enable-sockets. API сокетов РНР находится в процессе развития, поэтому многие из этих функций могут измениться. О текущем состоянии API сокетов можно узнать на http://www.php.net/manual/en/function.socket.php"> http://www.php.net/manual/en/function.socket.php .
В версии РНР 4.0.6 API сонетов все еще считается «экспериментальным». Большинство обсуждаемых в этом разделе функций в будущем может подвергнуться изменению в отношении количества и типа аргументов, возвращаемого значения
создании кода для практического применения, пока на этой теме не осядет «пыль времени».1
Socket_create()
int socket_create(int domain, int type, int protocol)
Эта функция создает сокет, представляющий собой переменную, с помощью которой клиент осуществляет обмен данными. В качестве аргумента domain функция принимает AF_INET или AF UNIX. Если в качестве аргумента передано значение AF_INET, это указывает на использование семейства протоколов Интернета, или TCP/IP. Этот аргумент обязателен, поскольку сокеты могут применяться и для других типов взаимодействия между процессами, например в доменных сокетах (domain sockets) UNIX, и тогда этот аргумент должен иметь значение AF_UNIX.