牛牛在线工具

socket_set_nonblock()

收录 8868 个 PHP 函数,含用途说明与用法示例。

socket_set_nonblock()

将给定的套接字标记为非阻塞模式,这意味着在读取和写入数据时,不会阻塞进程

函数名:socket_set_nonblock() 适用版本:PHP 4 >= 4.1.0, PHP 5, PHP 7 用法:socket_set_nonblock(resource $socket) 函数描述:socket_set_nonblock() 函数将给定的套接字标记为非阻塞模式,这意味着在读取和写入数据时,不会阻塞进程。 参数: $socket: 必需,要设置为非阻塞模式的套接字资源。 返回值:成功时返回 true,失败时返回 false。 示例: <?php // 创建套接字 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // 设置套接字为非阻塞模式 if (socket_set_nonblock($socket)) { echo "套接字设置为非阻塞模式成功!\n"; } else { echo "套接字设置为非阻塞模式失败!\n"; } // 连接到服务器 if (socket_connect($socket, '127.0.0.1', 8080) === false) { // 非阻塞模式下,连接可能会立即返回失败 $error = socket_last_error($socket); if ($error != SOCKET_EINPROGRESS && $error != SOCKET_EALREADY) { echo "连接服务器失败:" . socket_strerror($error) . "\n"; } else { echo "连接正在进行中...\n"; } } // 读取数据 $data = socket_read($socket, 1024); if ($data === false) { // 非阻塞模式下,如果没有数据可读取,会立即返回 false $error = socket_last_error($socket); if ($error != SOCKET_EAGAIN) { echo "读取数据失败:" . socket_strerror($error) . "\n"; } else { echo "没有可读取的数据。\n"; } } // 写入数据 $message = "Hello, Server!"; if (socket_write($socket, $message, strlen($message)) === false) { // 非阻塞模式下,如果无法立即写入数据,会立即返回 false $error = socket_last_error($socket); if ($error != SOCKET_EAGAIN) { echo "写入数据失败:" . socket_strerror($error) . "\n"; } else { echo "无法立即写入数据。\n"; } } // 关闭套接字 socket_close($socket); ?> 上述示例中,我们首先创建了一个套接字,然后使用 socket_set_nonblock() 函数将套接字设置为非阻塞模式。接下来,我们尝试连接到服务器,如果连接失败,根据错误码判断是否连接正在进行中。然后,我们尝试读取数据,如果没有可读取的数据,根据错误码判断是否没有数据可读取。最后,我们尝试写入数据,如果无法立即写入数据,根据错误码判断是否无法立即写入。最后,我们关闭套接字。 请注意,非阻塞模式下,某些操作可能会立即返回而不是阻塞等待。因此,您需要根据返回值或错误码来处理相应的情况。