GeekT
@GeekT
Основатель и генеральный директор "Пегий Дудочник"

Lamp отказывает в доступе в работе с сокетами и как с этим жить?

Не понятно что от меня хочет этот lamp.
И почему отказывает в доступе, я тут вроде самый старший.

Если делаю так

if(!socket_bind($sock, "/test-sock.sock") )
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not bind socket : [$errorcode] $errormsg \n");
}

То получаю такое:
Warning: socket_bind(): unable to bind address [13]: Отказано в доступе in /opt/lampp/htdocs/func/sockets/test-5.php on line 19
Could not bind socket : [13] Отказано в доступе


Ну а если вот так

if(!socket_bind($sock, "127.0.0.1" , 80) )
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not bind socket : [$errorcode] $errormsg \n");
}

То аналогично:
Warning: socket_bind(): unable to bind address [13]: Отказано в доступе in /opt/lampp/htdocs/func/sockets/test-5.php on line 19
Could not bind socket : [13] Отказано в доступе



История целиком

if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Couldn't create socket: [$errorcode] $errormsg \n");
}

echo "Socket created \n";

if (!socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1)) {
    echo socket_strerror(socket_last_error($socket));
    exit;
}

// Bind the source address
if(!socket_bind($sock, "127.0.0.1" , 80) )
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not bind socket : [$errorcode] $errormsg \n");
}

echo "Socket bind OK \n";

45de4794a6ee4e1a8b7e871a05489178.png


Насколько необходимо использовать этот треклятый socket_bind(), можно ли счастливо прожить жизнь без него?
Или как разобраться с ним, пока тебя не засмеяли коллеги и мама?
  • Вопрос задан
  • 317 просмотров
Решения вопроса 1
@neol
В первом случае нет прав на создание файла по указанному пути.
Во втором попытка использовать привилегированный порт (до 1024 включительно), на что так же не хватает прав.

Соответственно либо создавайте unix сокет по доступному на запись пути, либо используйте порт > 1024 для сетевого соединения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
я тут вроде самый старший
Самый старший у вас там root, ему и сокет принадлежит, судя по коду ошибки. А пользователь, от которого работает php к сокету доступа не имеет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы