php函數(shù)
socket_create
創(chuàng)建socket資源
resource socket_create ( int $domain , int $type , int $protocol )
domain
socket要使用的協(xié)議集,這個參數(shù)看著有點歧義拗慨,不知道的還以為是域名呢陷寝。取這個名字,估計是為了和第三個參數(shù)作區(qū)分星掰。
Domain | 描述 |
---|---|
AF_INET | IPv4 網(wǎng)絡(luò)協(xié)議 |
AF_INET6 | IPv6 網(wǎng)絡(luò)協(xié)議 |
AF_UNIX | 本地通訊協(xié)議 |
type
套接字類型
type | 描述 |
---|---|
SOCK_STREAM | 字節(jié)流多望。TCP基于這種流式套接字 |
SOCK_DGRAM | 數(shù)據(jù)報文。UDP基于這種數(shù)據(jù)報文套接字 |
SOCK_SEQPACKET | 提供固定長度的數(shù)據(jù)通信 |
SOCK_RAW | 提供讀取原始的網(wǎng)絡(luò)協(xié)議氢烘。一般使用這個套接字來實現(xiàn)ICMP請求(例如 ping) |
SOCK_RDM | 提供一個可靠的數(shù)據(jù)層怀偷,但不保證到達(dá)順序。一般操作系統(tǒng)未實現(xiàn)此功能威始。 |
protocol
與domain結(jié)合使用枢纠,設(shè)置指定domain套接字下的具體協(xié)議。這里的值可以通過 getprotobyname() 進(jìn)行讀取黎棠。例如
socket_create(AF_INET, SOCK_STREAM, getprotobyname('ip'));
getprotobyname
返回/etc/protocols下的協(xié)議值晋渺。
int getprotobyname ( string $name )
以osx系統(tǒng)下的/etc/protocols為例,這里只顯示其中一部分較常用的脓斩。
name | proto |
---|---|
ip | 0 |
icmp | 1 |
tcp | 6 |
udp | 17 |
socket_bind
將地址端口綁定到socket資源上木西,在使用 socket_connect() 或者 socket_listen() 之前調(diào)用此函數(shù)。
bool socket_bind ( resource $socket , string $address [, int $port = 0 ] )
socket_listen
用于服務(wù)端随静,監(jiān)聽socket的連接八千。
bool socket_listen ( resource $socket [, int $backlog = 0 ] )
在 socket_create() 和 socket_bind() 完成以后調(diào)用。
socket_listen()只適用于SOCK_STREAM或者SOCK_SEQPACKET燎猛。
socket
用socket_create()創(chuàng)建的一個有效連接恋捆。
backlog
socket連接請求隊列的最大數(shù)量,如果連接請求進(jìn)來重绷,隊列已滿沸停,則直接拋出ECONNREFUSED錯誤。
socket_set_option
設(shè)置socket參數(shù)
bool socket_set_option ( resource $socket , int $level , int $optname , mixed $optval )
socket
同上昭卓。
level
level指定了協(xié)議層級依賴的選項愤钾。例如,為了從socket一級獲取選項候醒,參數(shù)level就可以指定為SOL_SOCKET能颁。其他值也可以用getprotobyname()獲取。
optname
socket可選設(shè)置倒淫,這里有很多伙菊,我們只用到一個SO_REUSEADDR。
optname | 描述 |
---|---|
SO_REUSEADDR | 是否需要重復(fù)使用地址 |
optval
optname對應(yīng)的值。
socket_set_nonblock
設(shè)置socket為非阻塞占业。
bool socket_set_nonblock ( resource $socket )
當(dāng)一個操作作用在非阻塞的socket上時绒怨,腳本不會暫停執(zhí)行,直到收到信號或者它可以執(zhí)行操作了谦疾。然而南蹂,如果一個操作會導(dǎo)致阻塞,調(diào)用方法會失敗念恍。