首先,我可以看到已经解决了有关问题的问题。
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权限下实现的
非常感谢任何帮助:(
答案 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