php - 通过 SSL 的非阻塞套接字连接?

标签 php ssl

是否可以在非阻塞模式下通过 SSL 使用 socket_create/socket_connect?

我目前正在使用原生支持“ssl://”前缀的 \fsockopen()。但是,fsockopen() 将阻塞直到建立连接。这在可能有大约 50 个同步套接字等待读取的脚本中是不可取的。

我已经创建了一个测试脚本来使用 \socket_create(),它可以在调用 \socket_connect() 之前切换到非阻塞模式。但是,它似乎不支持 SSL 连接(与 fsockopen() 包装器不同)。

最佳答案

答案是使用带有标志 STREAM_CLIENT_ASYNC_CONNECTstream_socket_client;然而,SSL 似乎存在一些错误:

<?php
$socket = stream_socket_client(
        'ssl://197.136.197.92:443', $errno, $errstr,
        3, // timeout should be ignored when ASYNC
        STREAM_CLIENT_ASYNC_CONNECT
);
if (!$socket) {
    echo "errno = ".$errno."\nerrstr = ".$errstr."\n";
    exit;
}

在 Linux 上似乎有一个无限循环:

write(3, "\26\3\1\0o\1\0\0k\3\1L\325w/\337u\343uV\341\365}H\331\21k\313\341Q\f\356\""..., 116) = -1 EAGAIN (Resource temporarily unavailable)

关于 http://codepad.viper-7.com/ 的一些 BSD 变体:

<br />
<b>Warning</b>:  stream_socket_client() [<a href='function.stream-socket-client'>function.stream-socket-client</a>]: SSL: connection timeout in <b>/tmp/cpQ8Gv7B</b> on line <b>9</b><br />
<br />
<b>Warning</b>:  stream_socket_client() [<a href='function.stream-socket-client'>function.stream-socket-client</a>]: Failed to enable crypto in <b>/tmp/cpQ8Gv7B</b> on line <b>9</b><br />
<br />
<b>Warning</b>:  stream_socket_client() [<a href='function.stream-socket-client'>function.stream-socket-client</a>]: unable to connect to ssl://197.136.197.92:443 (Unknown error) in <b>/tmp/cpQ8Gv7B</b> on line <b>9</b><br />
errno = 115
errstr = 

另见 bug #49295 .

关于php - 通过 SSL 的非阻塞套接字连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4112708/

相关文章:

google-chrome - Chrome 浏览器如何知道要提示站点的客户端证书?

php - 如何在 PHP 输出缓冲区的开头添加一些内容?

php - 将第二个变量添加到在 PHP 中提交表单时生成的变量

php - Xpath 按类和任何其他子类选择

ssl - 如何将证书颁发机构 (CA) 添加到 k8s?

c - 任何允许与服务器直接通信的 C 中的 HTTP 库?

php - Yii 应用程序日志中散布着 COUNT(*)

javascript - 安全地将敏感数据从 PHP 传递到 javascript

Web 应用程序的 SSL 证书

Facebook 和 SSL 部分加密