Я пытаюсь создать сокет-соединение из сценария php с локальным сервером (Qt, QLocalServer), но у меня возникают проблемы при создании соединения на стороне php.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
set_time_limit(0);
ob_implicit_flush();
echo 'usr='. get_current_user().'<br/>';
$address = 'localhost';
$port = 4444; //Different port numbers produce same result
if (($sock = socket_create(AF_UNIX, SOCK_STREAM, 0)) === false)
{
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
exit();
}
if (socket_bind($sock, $address, $port) === false)
{
echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
exit();
}
...
Этов результате
usr = root Предупреждение: socket_bind (): невозможно связать адрес [98]: сбой адреса, уже используемого в /var/www/nbr/socket.php в строке 28 socket_bind (): reason: Адрес уже используется
Я пробовал несколько вещей, которые указывают на то, в чем может быть проблема, но не на то, как ее решить.socket_getsockname производит мусор, когда я пытаюсь отобразить адрес и информацию о порте, но если я изменю AF_UNIX
на AF_INET
и добавлю
$addr = ""; $pt = "";
echo "Socket name ok: " . socket_getsockname($sock, &$addr, &$pt) . '<br/>';
echo $addr . ", " . $pt . '<br/>';
, то результат будет
Socketимя ок: 1
0.0.0.0, 0
Так что адрес / порт просто никогда не устанавливаются должным образом?Кроме того, последующее socket_get_option($sock, 0, SO_REUSEADDR)
завершается с ошибкой AF_UNIX
, выполняется с AF_INET
, но я все еще получаю ошибку недоступного адреса.
Что я делаю не так?