Задать вопрос
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(), можно ли счастливо прожить жизнь без него?
Или как разобраться с ним, пока тебя не засмеяли коллеги и мама?
  • Вопрос задан
  • 330 просмотров
Подписаться 1 Оценить 6 комментариев
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@neol
В первом случае нет прав на создание файла по указанному пути.
Во втором попытка использовать привилегированный порт (до 1024 включительно), на что так же не хватает прав.

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽