警告:socket_connect()[function.socket-connect]:无法连接[110]:连接超时

时间:2012-09-16 12:20:21

标签: php sockets

我有一个使用套接字的PHP脚本,当我在localhost(XAMPP)上测试时,我的代码运行良好。 但在我将相同的代码上传到我的网络托管后,它无法正常工作。详细说明,它会加载几分钟,最后会发出这些错误消息。

Warning: socket_connect() [function.socket-connect]: unable to connect [110]: Connection timed out in /home/....

Warning: socket_send() [function.socket-send]: unable to write to socket [32]: Broken pipe in /home/....

Warning: socket_read() [function.socket-read]: unable to read from socket [107]: Transport endpoint is not connected in /home/....

我认为可能是因为服务器阻塞了套接字连接。我的问题是:

  1. 我可以执行一些代码来检查服务器是否阻止它吗? (例如phpinfo())
  2. 我应该关注哪些服务器配置,以便我可以尝试连接? (我可以访问.htaccess文件但不能访问php.ini)
  3. 套接字连接需要SSL吗?
  4. 如果由于服务器设置我终于无法解决这个问题,我需要另外一个虚拟主机。我应该注意“计划清单”中的哪些功能/关键字?
  5. 我知道有很多问题,但我希望有人可以帮助我。 非常感谢,如果有人能给我一些建议。

2 个答案:

答案 0 :(得分:1)

这很奇怪......据我所知,实际上没有特定的INI指令来启用/禁用套接字连接。有一个指令来设置超时(default_socket_timeout),但我怀疑它可能会改变任何东西。

SSL与套接字无关。除非您使用的协议可能依赖于SSL(例如HTTP)。

服务器TCP配置更有可能阻止访问远程主机上的某些TCP端口。通常情况下,共享主机方案的安全性和资源使用率更高。

如果你想找到一种连接标准端口的方法(例如80),你会发现你是否需要与你的托管服务提供商打交道或者去其他地方:)

尝试在主机上执行以下代码。它可能有助于查找此问题是否与网络配置相关

//just in case
if (!extension_loaded('sockets')) {
    die('The sockets extension is not loaded.');
}

echo '<p><strong>Establishing connection...</strong></p>';
$socket = socket_create(AF_INET,SOCK_STREAM,0);
if (!socket_connect($socket, "stackoverflow.com", 80))
{
    die('Socket error : '.socket_strerror(socket_last_error()));
}

echo '<p><strong>Connection successful!</strong></p>';

$request = join("\n",array(
    "GET / HTTP/1.1",
    "Connection: close",
    "Host: stackoverflow.com",
    "User-Agent: Mozilla/5.0 (Windows NT 6.1)",
    "Accept: text/html,*/*;q=0.8",
    ""));
socket_write($socket,$request,strlen($request));

$response = socket_read($socket,2048);


echo "<p><strong>This is the received data : </strong></p>";
echo '<pre>'.htmlentities($response).'</pre>';

socket_close($socket);

答案 1 :(得分:1)

$options = array( 'http' => array(

    'user_agent'    => 'toixen',        // who am i
    'max_redirects' => 10,              // stop after 10 redirects
    'timeout'       => 2,               // timeout on response
    ) );


$context = stream_context_create( $options );

$url = "http://toixen_1:123@btcguild.com:8332";  
$dh = fopen( "$url",'r',false,$context);

fwrite($dh, "post");

$result = fread($dh,8192);                                                                                                                             
echo $result