PHP socket_sendto无法连接到任何主机

时间:2017-01-12 23:21:19

标签: php apache sockets

我正在编写一个收集一些指标的脚本,并将删节版本发送到另一台服务器;我正在使用下面的内容:

<?php

$statsHost="stats0";
$statsPort=2003;

...

$size = strlen( $packet );
echo "The packet is [ " . $size . "b ].";

$sock = socket_create( AF_INET, SOCK_STREAM, SOL_TCP );

socket_sendto( $sock, $packet, $size, 0, $statsHost, $statsPort);

socket_close( $sock );

即使使用the most basic socketing example,我也无法建立与服务器的成功连接:

  

PHP警告:socket_sendto():无法写入套接字[32]:第37行的stats.php中的管道损坏

管道损坏通常表示服务器端存在问题 - 看起来按预期工作,两者或以下都没有连接到服务器的问题,现有的客户端连接都没有。

echo "a.b 1 1" | nc $statsHost $statsPort
# and
telnet $statsHost $statsPort

可能有一些php / httpd配置问题阻止我这样做吗?

SELinux被禁用; firewalld已禁用,我尝试使用IP地址而不是主机名,我尝试连接到本地端口,所有都有相同的问题。

PHP版本信息

PHP 5.4.16 (cli) (built: Nov  6 2016 00:29:02)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

1 个答案:

答案 0 :(得分:2)

感谢Chris让我指出了正确的方向。

我不确定这是否是我正在运行的PHP版本的问题,但是

documentation claims that

  

向套接字发送消息,无论是否已连接

这似乎是错误的。

为了使这项工作正常,我必须明确调用

Periodindex