程序员

php socket函数学习

2017-04-04  本文已影响293人  小小浪把_Dont_know拍

php函数

socket_create

创建socket资源

resource socket_create ( int $domain , int $type , int $protocol )

domain

socket要使用的协议集,这个参数看着有点歧义,不知道的还以为是域名呢。取这个名字,估计是为了和第三个参数作区分。

Domain 描述
AF_INET IPv4 网络协议
AF_INET6 IPv6 网络协议
AF_UNIX 本地通讯协议

type

套接字类型

type 描述
SOCK_STREAM 字节流。TCP基于这种流式套接字
SOCK_DGRAM 数据报文。UDP基于这种数据报文套接字
SOCK_SEQPACKET 提供固定长度的数据通信
SOCK_RAW 提供读取原始的网络协议。一般使用这个套接字来实现ICMP请求(例如 ping)
SOCK_RDM 提供一个可靠的数据层,但不保证到达顺序。一般操作系统未实现此功能。

protocol

与domain结合使用,设置指定domain套接字下的具体协议。这里的值可以通过 getprotobyname() 进行读取。例如

socket_create(AF_INET, SOCK_STREAM, getprotobyname('ip'));

getprotobyname

返回/etc/protocols下的协议值。

int getprotobyname ( string $name )

以osx系统下的/etc/protocols为例,这里只显示其中一部分较常用的。

name proto
ip 0
icmp 1
tcp 6
udp 17

socket_bind

将地址端口绑定到socket资源上,在使用 socket_connect() 或者 socket_listen() 之前调用此函数。

bool socket_bind ( resource $socket , string $address [, int $port = 0 ] )

socket_listen

用于服务端,监听socket的连接。

bool socket_listen ( resource $socket [, int $backlog = 0 ] )

在 socket_create() 和 socket_bind() 完成以后调用。

socket_listen()只适用于SOCK_STREAM或者SOCK_SEQPACKET。

socket

用socket_create()创建的一个有效连接。

backlog

socket连接请求队列的最大数量,如果连接请求进来,队列已满,则直接抛出ECONNREFUSED错误。

socket_set_option

设置socket参数

bool socket_set_option ( resource $socket , int $level , int $optname , mixed $optval )

socket

同上。

level

level指定了协议层级依赖的选项。例如,为了从socket一级获取选项,参数level就可以指定为SOL_SOCKET。其他值也可以用getprotobyname()获取。

optname

socket可选设置,这里有很多,我们只用到一个SO_REUSEADDR。

optname 描述
SO_REUSEADDR 是否需要重复使用地址

optval

optname对应的值。

socket_set_nonblock

设置socket为非阻塞。

bool socket_set_nonblock ( resource $socket )

当一个操作作用在非阻塞的socket上时,脚本不会暂停执行,直到收到信号或者它可以执行操作了。然而,如果一个操作会导致阻塞,调用方法会失败。

参考资料

php长连接,奏是这么简单
细说socket

上一篇下一篇

猜你喜欢

热点阅读