= 4.1.0, PHP 5, PHP 7, PHP 8)socket_create — 創(chuàng)建一個(gè)套接字(通訊節(jié)點(diǎn))說明socket_create(int $domain, int $type, int $protocol): Socket|false創(chuàng)建并">

socket_create

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

socket_create創(chuàng)建一個(gè)套接字(通訊節(jié)點(diǎn))

說明

socket_create(int $domain, int $type, int $protocol): Socket|false

創(chuàng)建并返回一個(gè) Socket 實(shí)例,也稱作一個(gè)通訊節(jié)點(diǎn)。一個(gè)典型的網(wǎng)絡(luò)連接由 2 個(gè)套接字構(gòu)成,一個(gè)運(yùn)行在客戶端,另一個(gè)運(yùn)行在服務(wù)器端。

參數(shù)

domain

domain 參數(shù)指定哪個(gè)協(xié)議用在當(dāng)前套接字上。

可用的地址/協(xié)議
Domain 描述
AF_INET IPv4 網(wǎng)絡(luò)協(xié)議。TCP 和 UDP 都可使用此協(xié)議。
AF_INET6 IPv6 網(wǎng)絡(luò)協(xié)議。TCP 和 UDP 都可使用此協(xié)議。
AF_UNIX 本地通訊協(xié)議。具有高性能和低成本的 IPC(進(jìn)程間通訊)。
type

type 參數(shù)用于選擇套接字使用的類型。

可用的套接字類型
類型 描述
SOCK_STREAM 提供一個(gè)順序化的、可靠的、全雙工的、基于連接的字節(jié)流。支持?jǐn)?shù)據(jù)傳送流量控制機(jī)制。TCP 協(xié)議即基于這種流式套接字。
SOCK_DGRAM 提供數(shù)據(jù)報(bào)文的支持。(無連接,不可靠、固定最大長(zhǎng)度).UDP協(xié)議即基于這種數(shù)據(jù)報(bào)文套接字。
SOCK_SEQPACKET 提供一個(gè)順序化的、可靠的、全雙工的、面向連接的、固定最大長(zhǎng)度的數(shù)據(jù)通信;數(shù)據(jù)端通過接收每一個(gè)數(shù)據(jù)段來讀取整個(gè)數(shù)據(jù)包。
SOCK_RAW 提供讀取原始的網(wǎng)絡(luò)協(xié)議。這種特殊的套接字可用于手工構(gòu)建任意類型的協(xié)議。一般使用這個(gè)套接字來實(shí)現(xiàn) ICMP 請(qǐng)求(例如 ping)。
SOCK_RDM 提供一個(gè)可靠的數(shù)據(jù)層,但不保證到達(dá)順序。一般的操作系統(tǒng)都未實(shí)現(xiàn)此功能。
protocol

protocol 參數(shù),是設(shè)置指定 domain 套接字下的具體協(xié)議。這個(gè)值可以使用 getprotobyname() 函數(shù)進(jìn)行讀取。如果所需的協(xié)議是 TCP 或 UDP,可以直接使用常量 SOL_TCPSOL_UDP

常見協(xié)議
名稱 描述
icmp Internet Control Message Protocol 主要用于網(wǎng)關(guān)和主機(jī)報(bào)告錯(cuò)誤的數(shù)據(jù)通信。例如“ping”命令(在目前大部分的操作系統(tǒng)中)就是使用 ICMP 協(xié)議實(shí)現(xiàn)的。
udp User Datagram Protocol 是一個(gè)無連接的、不可靠的、具有固定最大長(zhǎng)度的報(bào)文協(xié)議。由于這些特性,UDP 協(xié)議擁有最小的協(xié)議開銷。
tcp Transmission Control Protocol 是一個(gè)可靠的、基于連接的、面向數(shù)據(jù)流的全雙工協(xié)議。TCP 能夠保障所有的數(shù)據(jù)包是按照其發(fā)送順序而接收的。如果任意數(shù)據(jù)包在通訊時(shí)丟失,TCP 將自動(dòng)重發(fā)數(shù)據(jù)包直到目標(biāo)主機(jī)應(yīng)答已接收。因?yàn)榭煽啃院托阅艿脑?,TCP 在數(shù)據(jù)傳輸層使用 8bit 字節(jié)邊界。因此,TCP 應(yīng)用程序必須允許傳送部分報(bào)文的可能。

返回值

socket_create() 正確時(shí)返回一個(gè) Socket 實(shí)例,失敗時(shí)返回 false。要讀取錯(cuò)誤代碼,可以調(diào)用 socket_last_error()。這個(gè)錯(cuò)誤代碼可以通過 socket_strerror() 讀取文字的錯(cuò)誤說明。

錯(cuò)誤/異常

如果使用一個(gè)無效的 domaintype,socket_create() 會(huì)使用 AF_INETSOCK_STREAM 替代無效參數(shù),同時(shí)會(huì)發(fā)出 E_WARNING 警告信息。

更新日志

版本 說明
5.0.0 增加 AF_INET6 支持。
8.0.0 創(chuàng)建成功時(shí),該函數(shù)現(xiàn)在返回一個(gè) Socket 實(shí)例; 在此之前,返回的是一個(gè) resource。

參見