В OS-X у меня есть процесс с именем «слушатель», который ждет «accept» для чтения данных из локального сокета unix с именем listener_socket. к сожалению, любая попытка подключения этого сокета завершается в ошибке отказа связи.Отключено подключение сокета UNIX
Использование LSOF, чтобы убедиться, что 'слушатель' на самом деле слушать этот сокет:
sudo lsof -p 570
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
...
listener 570 root 3u unix 0x48a2751a1bad61ef 0t0 /private/var/run/my_sockets/listener_socket
Обратите внимание, что файл, на самом деле, действительный Unix сокет:
file /private/var/run/my_sockets/listener_socket /private/var/run/my_sockets/listener_socket: socket
Однако , он все еще не подключается, даже когда я использую альтернативный путь от команды (используя команду socat)
sudo socat LOCAL:/private/var/run/my_sockets/listener_socket,interval=1 EXEC:'aaaaaaaaaaaaaaaaa',nofork
2015/11/23 00:57:33 socat[928] E connect(3, LEN=49 AF=1 "/private/var/run/my_sockets/listener_socket", 49): Connection refused
, возможно, есть больше, что я могу сделать, чтобы понять, почему я не могу отправить данные в сокет, даже если хотя бы очевидно, что «слушатель» ожидает эти данные с другой стороны?
вот соответствующая часть моего кода:
Отправитель:
sockfd = socket(PF_UNIX, SOCK_STREAM, 0);
address.sun_family = AF_UNIX;
snprintf(address.sun_path, UNIX_PATH_MAX, "%s", LISTENER_SOCKET_PATH);
connect(sockfd, (struct sockaddr *) &address, sizeof(struct sockaddr_un)
write ...
приемник:
fd = socket(PF_UNIX, SOCK_STREAM, 0);
unlink(sock_name); // in case the socket is used before
listen(server->fd, 5); // we don't reach 5 listeners for sure ...
chmod(sock_name, mode); // giving root privilages
accept(server->fd, (struct sockaddr *) &server->address, &server->address_length);
read ...
благодаря
Пожалуйста, отправьте исходный код, желательно «минимальный, полный, проверяемый пример». См. Http://stackoverflow.com/help/mcve для получения рекомендаций. – keithmo
Вы проверили разрешения на файл сокета? – TheDarkKnight
@ TheDarkKnight, обратите внимание, что 'ls -ltr' показывает: srw ------- 1 корень daemon 0 ноя 22 07:09/private/var/run/my_sockets/listener_socket , а родительский процесс, в котором запущен прослушиватель, имеет pid 0, поэтому слушатель также имеет корневые привилегии 0 49 1 0 6:36 AM ?? 3: 24.06/Библиотека/Поддержка приложений/PaloAltoNetworks/Traps/bin/trapsd – Zohar81