= 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)建并">
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_create — 創(chuàng)建一個(gè)套接字(通訊節(jié)點(diǎn))
創(chuàng)建并返回一個(gè) Socket 實(shí)例,也稱作一個(gè)通訊節(jié)點(diǎn)。一個(gè)典型的網(wǎng)絡(luò)連接由 2 個(gè)套接字構(gòu)成,一個(gè)運(yùn)行在客戶端,另一個(gè)運(yùn)行在服務(wù)器端。
domain
domain
參數(shù)指定哪個(gè)協(xié)議用在當(dāng)前套接字上。
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)文的支持。(無連接,不可靠、固定最大長度).UDP協(xié)議即基于這種數(shù)據(jù)報(bào)文套接字。 |
SOCK_SEQPACKET |
提供一個(gè)順序化的、可靠的、全雙工的、面向連接的、固定最大長度的數(shù)據(jù)通信;數(shù)據(jù)端通過接收每一個(gè)數(shù)據(jù)段來讀取整個(gè)數(shù)據(jù)包。 |
SOCK_RAW |
提供讀取原始的網(wǎng)絡(luò)協(xié)議。這種特殊的套接字可用于手工構(gòu)建任意類型的協(xié)議。一般使用這個(gè)套接字來實(shí)現(xiàn) ICMP 請求(例如 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_TCP
和 SOL_UDP
。
名稱 | 描述 |
---|---|
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è)無連接的、不可靠的、具有固定最大長度的報(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ò)誤說明。
如果使用一個(gè)無效的 domain
或 type
,socket_create()
會使用 AF_INET
和
SOCK_STREAM
替代無效參數(shù),同時(shí)會發(fā)出 E_WARNING
警告信息。
版本 | 說明 |
---|---|
5.0.0 |
增加 AF_INET6 支持。
|
8.0.0 | 創(chuàng)建成功時(shí),該函數(shù)現(xiàn)在返回一個(gè) Socket 實(shí)例; 在此之前,返回的是一個(gè) resource。 |