SSL上的非阻塞套接字连接?

CAM*_*son 5 php ssl

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

我目前正在使用\fsockopen()本机支持'ssl://'前缀.但是,fsockopen()将阻止直到建立连接.这在一个脚本中是不可取的,该脚本可以有大约50个同时插槽等待读取.

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

Art*_*cto 3

答案是使用stream_socket_clientflag来代替STREAM_CLIENT_ASYNC_CONNECT;然而 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;
}
Run Code Online (Sandbox Code Playgroud)

在 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)
Run Code Online (Sandbox Code Playgroud)

在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 = 
Run Code Online (Sandbox Code Playgroud)

另请参阅错误#49295