(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_create — 創(chuàng )建一個(gè)套接字(通訊節點(diǎn))
創(chuàng )建并返回一個(gè) Socket 實(shí)例,也稱(chēng)作一個(gè)通訊節點(diǎn)。一個(gè)典型的網(wǎng)絡(luò )連接由 2 個(gè)套接字構成,一個(gè)運行在客戶(hù)端,另一個(gè)運行在服務(wù)器端。
domain
domain
參數指定哪個(gè)協(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
參數用于選擇套接字使用的類(lèi)型。
類(lèi)型 | 描述 |
---|---|
SOCK_STREAM |
提供一個(gè)順序化的、可靠的、全雙工的、基于連接的字節流。支持數據傳送流量控制機制。TCP 協(xié)議即基于這種流式套接字。 |
SOCK_DGRAM |
提供數據報文的支持。(無(wú)連接,不可靠、固定最大長(cháng)度).UDP協(xié)議即基于這種數據報文套接字。 |
SOCK_SEQPACKET |
提供一個(gè)順序化的、可靠的、全雙工的、面向連接的、固定最大長(cháng)度的數據通信;數據端通過(guò)接收每一個(gè)數據段來(lái)讀取整個(gè)數據包。 |
SOCK_RAW |
提供讀取原始的網(wǎng)絡(luò )協(xié)議。這種特殊的套接字可用于手工構建任意類(lèi)型的協(xié)議。一般使用這個(gè)套接字來(lái)實(shí)現 ICMP 請求(例如 ping)。 |
SOCK_RDM |
提供一個(gè)可靠的數據層,但不保證到達順序。一般的操作系統都未實(shí)現此功能。 |
protocol
protocol
參數,是設置指定 domain
套接字下的具體協(xié)議。這個(gè)值可以使用 getprotobyname()
函數進(jìn)行讀取。如果所需的協(xié)議是 TCP 或 UDP,可以直接使用常量 SOL_TCP
和 SOL_UDP
。
名稱(chēng) | 描述 |
---|---|
icmp | Internet Control Message Protocol 主要用于網(wǎng)關(guān)和主機報告錯誤的數據通信。例如“ping”命令(在目前大部分的操作系統中)就是使用 ICMP 協(xié)議實(shí)現的。 |
udp | User Datagram Protocol 是一個(gè)無(wú)連接的、不可靠的、具有固定最大長(cháng)度的報文協(xié)議。由于這些特性,UDP 協(xié)議擁有最小的協(xié)議開(kāi)銷(xiāo)。 |
tcp | Transmission Control Protocol 是一個(gè)可靠的、基于連接的、面向數據流的全雙工協(xié)議。TCP 能夠保障所有的數據包是按照其發(fā)送順序而接收的。如果任意數據包在通訊時(shí)丟失,TCP 將自動(dòng)重發(fā)數據包直到目標主機應答已接收。因為可靠性和性能的原因,TCP 在數據傳輸層使用 8bit 字節邊界。因此,TCP 應用程序必須允許傳送部分報文的可能。 |
socket_create() 正確時(shí)返回一個(gè) Socket 實(shí)例,失敗時(shí)返回
false
。要讀取錯誤代碼,可以調用 socket_last_error()。這個(gè)錯誤代碼可以通過(guò) socket_strerror() 讀取文字的錯誤說(shuō)明。
如果使用一個(gè)無(wú)效的 domain
或 type
,socket_create()
會(huì )使用 AF_INET
和
SOCK_STREAM
替代無(wú)效參數,同時(shí)會(huì )發(fā)出 E_WARNING
警告信息。
版本 | 說(shuō)明 |
---|---|
5.0.0 |
增加 AF_INET6 支持。
|
8.0.0 | 創(chuàng )建成功時(shí),該函數現在返回一個(gè) Socket 實(shí)例; 在此之前,返回的是一個(gè) resource。 |