2013-08-16 101 views
3

首先,我可以看到已经解决了问题。无法运行套接字服务器

PHP web socket unable to bind socket

Issue in setting the socket server

socket_bind(): unable to bind address [99] (Ubuntu on Amazon EC2)

和许多其他资源,他们都表示,问题是在使用的端口或外部IP, 等

,但我不能克服它。 我的服务器在CentOS 6.3上运行并使用CPanel(它是惠普服务器https://www.hpcloud.com/)。

的web套接字演示源代码我所得到的是https://code.google.com/p/phpwebsocket/

我的设置是

$master = WebSocket("127.0.0.1",4444); // even I tried with localhost, they worked same 

这是我试过的步骤和相应的错误:

1 /。我尝试下面的命令,以确保我用这一个端口,可使用

$ lsof|grep 4444 

$ netstat -a -p -n 

但我始终得到了错误,虽然这个端口4444是免费

警告:socket_bind() :无法 地址[98]结合:地址已在使用中 /home/myapp/public_html/websocket/server.php线60上

2 /。奇怪的是,当我检查其使用

crond  1621  root DEL  REG    252,1    39835 /lib64/libpam.so.0.82.2.#prelink#.B1eyGx 

atd  1633  root DEL  REG    252,1    39835 /lib64/libpam.so.0.82.2.#prelink#.B1eyGx 

端口835有趣的事情发生了:

然后我跑我的终端命令shell

php /home/myapp/public_html/websocket/server.php 

的的server.php错误已经消失,而不是它是

服务器入门:2013-08-16 03:19:54

主套接字:资源ID#4

上侦听:127.0.0.1端口835

我认为它开始工作,但实际上却没有,因为当我用浏览器打开server.php URL

http://mysite/server.php 

的错误是 “权限denined”

娃rning:socket_bind()[函数。插座绑定]:无法绑定地址 [13]:权限被拒绝在 /home/myapp/public_html/websocket/server.php上线60 socket_bind()失败

编辑:关于允许,我可以用server.php打开同级目录下的client.html,没有问题。 文件夹代码权限为755,且用户不是root用户。 我所有的命令是在root权限执行

任何帮助是极大的赞赏:(

+0

这听起来像一个权限问题。运行httpd的用户是哪个用户,以及从命令行运行的用户是什么? –

+0

我有两个用户:root和myuser,文件夹所有者当前是myuser。我可以在server.php完全相同的目录下运行client.html,我认为这不是原因 –

+0

我的建议是,当你从命令行运行它时,因为进程正在以你的权限运行,有权访问它需要执行的某个资源/文件,而您的网络服务器(httpd)正在运行的用户无法访问故障。我不能专门把我的手指放在那个文件/资源​​上。 –

回答

0

我会假设,问题是,你尝试加载的WebSocket服务器在web浏览器。最有可能,也有apache用户的安全设置不允许你的服务器监听不常见的端口

CentOS通常会在默认情况下启用SELinux CentOS Linux的Apache安全策略的一部分默认情况下,Apache只允许服务访问到与HTTP相关的识别端口(即端口80,8080等)

启用SELinux的,你可以让Apache将通过添加规则,以允许里面的SELinux使用“semanage的”命令TCP端口4444上监听:

~$ semanage port -a -t http_port_t -p tcp 4444