2015-11-23 2 views
3

В 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 ... 

благодаря

+5

Пожалуйста, отправьте исходный код, желательно «минимальный, полный, проверяемый пример». См. Http://stackoverflow.com/help/mcve для получения рекомендаций. – keithmo

+1

Вы проверили разрешения на файл сокета? – TheDarkKnight

+0

@ 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

ответ

2

Сервер кажется пропустить вызова bind() на сокете ,

Смежные вопросы