首先,我可以看到已经解决了围绕这个问题的问题。
PHP web套接字无法绑定套接字
设置套接字服务器时出现问题
socket_bind():无法绑定地址[99](亚马逊EC2上的Ubuntu)
以及许多其他资源,他们都说问题出在使用的端口或外部IP中,等
但我无法释怀。我的服务器运行在CentOS 6.3上,使用CPanel(它是HP服务器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():无法绑定address[98]:地址已在中使用/home/myapp/public_html/websocket/server.php,第60行
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.phpsocket_bind()失败
编辑:关于权限,我可以用server.php在同一级别的目录中打开client.html,没有问题。文件夹代码权限为755,用户不是root用户。我的所有命令都是在根权限下实现的
非常感谢您的帮助:(
我认为问题在于您正试图在Web浏览器中加载Websocket服务器。最有可能的是,apache用户的安全设置不允许您的服务器侦听不常见的端口。
在默认情况下,CentOS通常附带启用SELinux的功能。CentosLinux针对Apache的部分安全策略是,默认情况下,Apache只允许服务访问与HTTP相关的已识别端口(即端口80、8080等)。
启用SELinux后,您可以通过使用"semanage"命令在SELinux内部添加一条规则来允许Apache侦听tcp端口4444:
~$ semanage port -a -t http_port_t -p tcp 4444