Câu trả lời sẽ là sử dụng thay vì stream_socket_client
bằng cờ STREAM_CLIENT_ASYNC_CONNECT
; Tuy nhiên có vẻ là một số lỗi với 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;
}
Trên Linux có vẻ là một vòng lặp vô hạn với:
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)
Trên một số biến thể BSD trên http://codepad.viper-7.com/:
<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 =
Xem cũng bug #49295.
'stream_socket_client' hoạt động tốt, cảm ơn. Một vấn đề là không có khả năng phát hiện thời gian chờ trên kết nối không đồng bộ. Tôi đã đăng giải pháp của mình tại đây: http://stackoverflow.com/questions/3333398/php-get-socket-error-string-when-async-connect-fails/4114499#4114499 – CAMason
@Craig Bạn đang sử dụng phiên bản nào? Có thể đã có một lỗi được giới thiệu ở đây gần đây, bởi vì tôi đang gặp phải các vấn đề tôi đã mô tả. – Artefacto
5.3.3 trên Ubuntu. Tôi không thấy bất kỳ cảnh báo nào trong chế độ SSL. – CAMason