stream_socket_client无法连接(连接超时)

时间:2009-11-20 09:00:12

标签: php sockets stream ssl-certificate

我正在使用证书和私钥

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $certfile);
stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);
$fp = stream_socket_client('ssl://gateway.xyz.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);

它在我的本地XAMPP服务器上运行,但它无法在外部服务器中运行:

  

警告:stream_socket_client()[function.stream-socket-client]:无法连接到/ home / biranchi / public_html /中的ssl://gateway.sandbox.push.apple.com:2195(连接超时)第42行的push.php

     

无法连接110

错误是什么?我是否需要更改服务器中的某些设置?

3 个答案:

答案 0 :(得分:18)

我通过打开生产服务器上的端口2195解决了这个问题。您可以通过以下命令验证$ telnet gateway.push.apple.com 2195

-bash-3.2# telnet gateway.push.apple.com 2195

Trying 17.149.38.141...
Connected to gateway.push.apple.com (17.149.38.141).
Escape character is '^]'.
Connection closed by foreign host.

答案 1 :(得分:4)

检查您的个人防火墙设置,并确保您没有阻止它。尝试禁用防火墙。

此外,某些API类似于来自实际域而非桌面的请求。我没有理由相信Apple以这种方式工作,但这也是要检查的东西。

还要确保并ping网关.sandbox.push.apple.com并确保您有良好的连接。

答案 2 :(得分:1)

您必须将防火墙设置为允许所有17.0.0.0/8块(它都属于Apple!)。查看THIS ANSWER

根据Apple

  

APNs服务器使用负载平衡,因此您的设备不会始终连接到相同的公共IP地址以进行通知。最好允许访问分配给Apple的整个17.0.0.0/8地址块上的这些端口。

如果您使用CSF防火墙(像我一样),我建议将此行添加到csf.allow文件中:

tcp|out|d=2195|d=17.0.0.0/8

使用此而不仅仅是" 17.0.0.0/8"将只允许与苹果公司的特别联系,特别是2195号港口。国家安全局不会喜欢它,但这更加精确和安全! ;)