🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**socket_set_option** ( resource **$socket** , int **$level** , int **$optname** , mixed **$optval** ) : bool — 设置套接字的套接字选项 通过optname参数设置指定的选项 在指定的协议级别level,设置为套接字的optval参数指向的值 成功时返回 **`TRUE`**, 或者在失败时返回 **`FALSE`**。 socket_setopt — 别名 socket_set_option **参数2level**指定选项所在的协议级别。 例如,要在套接字级别检索选项,将使用SOL\_SOCKET的级别参数。 通过指定该级别的协议号,可以使用其他级别,例如TCP。 协议编号可以通过使用getprotobyname()函数找到 **参数3optname可用选项** | Option | Description | Type | | --- | --- | --- | | **`SO_DEBUG`** |报告是否正在记录调试信息. | int | | **`SO_BROADCAST`** | 报告是否支持广播消息的传输. | int | | **`SO_REUSEADDR`** | 报告本地地址是否可以重复使用. | int | | **`SO_REUSEPORT`** | 报告本地端口是否可以重用. | int | | **`SO_KEEPALIVE`** | 报告是否通过定期传输消息使连接保持活动状态。 如果连接的套接字无法响应这些消息,则连接断开,并且使用SIGPIPE信号通知写入该套接字的进程. | int | | **`SO_LINGER`** | 如果存在数据,则报告套接字是否在socket_close()上停留。 默认情况下,当套接字关闭时,它将尝试发送所有未发送的数据。 对于面向连接的套接字,socket_close()将等待其对等方确认数据.<br>如果l_OnOff非零且l_linger为零,则在面向连接的套接字的情况下,将丢弃所有未发送的数据,并将RST(重置)发送到对等方<br>另一方面,如果l\_onoff不为零且l\_linger不为零,则socket\_close()将阻塞,直到所有数据发送完毕或l\_linger中指定的时间过去。 如果套接字是非阻塞的,则socket\_close()将失败并返回错误 | array . 该数组将包含两个键:l_onoff和l_linger| | **`SO_OOBINLINE`** | 报告“套接字”是否内联带外数据. | int | | **`SO_SNDBUF`** | 报告发送缓冲区的大小。. | int | | **`SO_RCVBUF`** |报告接收缓冲区的大小. | int | | **`SO_ERROR`** | 报告有关错误状态的信息并清除它 | int | | **`SO_TYPE`** | 报告套接字类型(e.g.**`SOCK_STREAM`**). | int | | **`SO_DONTROUTE`** |报告传出邮件是否绕过标准路由功能| int | | **`SO_RCVLOWAT`** | 报告套接字输入操作要处理的最小字节数. | int | | **`SO_RCVTIMEO`** | Rep报告输入操作的超时值. | array . 该数组将包含两个键:sec是超时值的秒部分,而usec是超时值的微秒部分. | | **`SO_SNDTIMEO`** |报告超时值,该超时值指定由于流控制阻止发送数据而导致输出功能阻塞的时间. | array . 该数组将包含两个键:sec是超时值的秒部分,而usec是超时值的微秒部分. | | **`SO_SNDLOWAT`** | 报告套接字输出操作要处理的最小字节数. | int | | **`TCP_NODELAY`** | 报告是否禁用Nagle TCP算法. | int | | **`MCAST_JOIN_GROUP`** | 加入多播组 (added in PHP 5.4) | array 使用键“group” ,指定一个字符串 | | **`MCAST_LEAVE_GROUP`** | 离开多播组 (added in PHP 5.4) | array | | **`MCAST_BLOCK_SOURCE`** | 阻止从特定源到达特定多播组的数据包,这些数据包必须事先已加入. (added in PHP 5.4) | array 具有与**MCAST_JOIN_GROUP**相同​​的键,以及一个映射到字符串的额外键source | | **`MCAST_UNBLOCK_SOURCE`** | 取消阻止(再次开始接收)从特定源地址到达特定多播组的数据包,这些数据包必须事先已加入. (added in PHP 5.4) | array | | **`MCAST_JOIN_SOURCE_GROUP`** | 接收发往特定组播组的数据包,该组播组的源地址与特定值匹配. (added in PHP 5.4) | array | | **`MCAST_LEAVE_SOURCE_GROUP`** | 停止接收发往源地址与特定值匹配的特定组播组的数据包. (added in PHP 5.4) | array | | **`IP_MULTICAST_IF`** |IPv4组播数据包的传出接口. (added in PHP 5.4) |指定接口号的int或字符串返回接口索引。 请注意,与C API不同,此选项不使用IP地址.请注意,与C API不同,此选项不使用IP地址。 这样可以消除**IP_MULTICAST_IF**和**IPV6_MULTICAST_IF**之间的接口差异. | | **`IPV6_MULTICAST_IF`** | IPv6组播数据包的出接口. (added in PHP 5.4) | 与**IP_MULTICAST\_IF**相同. | | **`IP_MULTICAST_LOOP`** | IPv4数据包的多播回送策略,该策略确定此套接字发送的多播数据包是否也到达该主机使用的出接口上已加入同一多播组的同一主机中的接收者。默认情况下就是这种情况. (added in PHP 5.4) | int 任何值都将被接受,并将按照通常的PHP规则转换为布尔值 | | **`IPV6_MULTICAST_LOOP`** | 与**IP_MULTICAST_LOOP**类似,但适用于IPv6 (added in PHP 5.4) | int . 参阅**IP_MULTICAST_LOOP**. | | **`IP_MULTICAST_TTL`** | IPv4组播数据包的生存时间。 该值应介于0(不要离开接口)和255之间。默认值是1(仅到达本地网络). (added in PHP 5.4) | int 取值范围0 ~255. | | **`IPV6_MULTICAST_HOPS`** | 与**IP_MULTICAST_TTL**类似,但用于IPv6数据包。 值-1也被接受,这意味着应该使用默认路由. (added in PHP 5.4) | int betw | ``` $socket = socket_create_listen(1223); $linger = array('l_linger' => 1, 'l_onoff' => 1); socket_set_option($socket, SOL_SOCKET, SO_LINGER, $linger); socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1) var_dump(socket_get_option($socket, SOL_SOCKET, SO_REUSEADDR)); ```