socket_set_nonblock

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

socket_set_nonblock为文件描述符 fd 设置非阻塞模式

描述

socket_set_nonblock(Socket $socket): bool

socket_set_nonblock() 函数在由 socket 参数指定的套接字上设置 O_NONBLOCK 标志。

当对非阻塞套接字执行操作(例如接收、发送、连接、接受等)时,脚本不会暂停其执行,直到它收到信号或能够执行操作。相反,如果操作会导致阻塞,则调用的函数将失败。

参数

socket

使用 socket_create()socket_accept() 创建的 Socket 实例。

返回值

成功时返回 true,失败时返回 false

变更日志

版本 描述
8.0.0 socket 现在是 Socket 实例;以前,它是一个 resource

示例

示例 #1 socket_set_nonblock() 示例

<?php
$socket
= socket_create_listen(1223);
socket_set_nonblock($socket);

socket_accept($socket);
?>

此示例在所有接口上的端口 1223 上创建一个监听套接字,并将套接字设置为 O_NONBLOCK 模式。 socket_accept() 将立即失败,除非此时恰好存在待处理的连接。

参见

添加备注

用户贡献的备注 1 条备注

kpobococ at gmail dot com
14 年前
注意,在循环中使用此函数(即带有套接字的守护进程)时,例如 socket_accept(),每次没有可用连接可以读取时都会发出警告。我的 PHP 错误日志文件在几秒钟内变得很大,最终导致服务器崩溃。

当然,我在函数之前使用了 @ 来解决这个问题。

[编辑器:可以使用 socket_select 来检测套接字上的新连接(它是“可读”事件)]
To Top