2013-08-16 3 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 (это сервер 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]: адрес уже используется в /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 

непонятное случилось:

Тогда я побежал server.php на моей командной оболочки терминала

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

в ошибка исчезла, а не

Начато: 2013-08-16 03:19:54

Мастер сокета: идентификатор ресурса # 4

Прослушивание: 127.0.0.1 порт 835

Я думал, что он начал работать, но на самом деле это не так, потому что, когда я открываю server.php в браузере с URL

http://mysite/server.php 

ошибка "разрешение denined"

Wa rning: socket_bind() [функция.сокетов привязки]: не удалось связать адрес [13]: Разрешение отказано в /home/myapp/public_html/websocket/server.php на линии 60 socket_bind() не

Отредактировано: О разрешение, я может открыть client.html в том же самом каталоге с server.php без проблем. Разрешение на доступ к папке - 755, а пользователь - не root. Все мои команды был реализован в корневой привилегии

Любая помощь очень ценится :(

+0

Это звучит как вопрос прав доступа. Какой пользователь httpd работает как и какой пользователь вы используете, как при запуске из командной строки? –

+0

У меня есть два пользователя: root & myuser и владелец папки в настоящее время myuser. Я мог запустить client.html в том же самом каталоге уровня с server.php абсолютно, я думаю, что это не было причиной. –

+0

. Я предлагаю, чтобы при запуске из командной строки, поскольку процесс выполняется с вашими привилегиями, он может имеют доступ к некоторому ресурсу/файлу, который он должен выполнить, тогда как пользователь, которому работает ваш веб-сервер (httpd), не имеет доступа к ошибке. Я не могу сказать, что это файл/ресурс. –

ответ

0

Я бы предположил, что проблема в том, что вы пытаетесь загрузить сервер 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 
Смежные вопросы