无法运行套接字服务器

时间:2013-08-16 04:16:32

标签: php websocket

首先,我可以看到已经解决了有关问题的问题。

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(它是HP服务器https://www.hpcloud.com/)。

我获得的网络套接字演示源代码位于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]:已在使用的地址   第60行/home/myapp/public_html/websocket/server.php

2 /。奇怪的是当我检查了

使用的端口835时
 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 
发生了有趣的事情:

然后我在终端命令shell

上运行了server.php
 php /home/myapp/public_html/websocket/server.php

错误消失了,而不是

  

服务器已启动:2013-08-16 03:19:54

     

主套接字:资源ID#4

     

倾听:127.0.0.1端口835

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

http://mysite/server.php

错误是“权限被拒绝”

  

警告:socket_bind()[function.socket-bind]:无法绑定地址   [13]:许可被拒绝   第60行/home/myapp/public_html/websocket/server.php   socket_bind()失败

已编辑:关于权限,我可以在server.php的同一级别目录中打开client.html而不会出现问题。 文件夹代码权限为755,用户不是root。 我的所有命令都是在root权限下实现的

非常感谢任何帮助:(

1 个答案:

答案 0 :(得分:0)

我认为问题在于您尝试在Web浏览器中加载Websocket服务器。最有可能的是,apache用户的安全设置不允许服务器监听不常见的端口。

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

启用SELinux后,您可以允许Apache通过添加规则来侦听tcp端口4444,以便在SELinux中使用' semanage'命令:

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