Не удается подключиться к «абстрактному» Linux Unix сокету

Я пытаюсь использовать UNIX-сокеты для связи между потоками. Программа предназначена только для запуска в Linux. Чтобы избежать создания файлов сокетов, я хотел использовать & quot; abstract & quot; сокеты, как описано в unix (7).

Тем не менее, я не могу подключиться к этим разъемам. Все работает, если я использую "путь" & quot; сокеты, хотя.

Вот код (я не цитировал какую-либо обработку ошибок, но это сделано): Тема # 1:

int log_socket = socket(AF_LOCAL, SOCK_STREAM, 0);
struct sockaddr_un logaddr;
socklen_t sun_len = sizeof(struct sockaddr_un);
logaddr.sun_family = AF_UNIX;
logaddr.sun_path[0] = 0;
strcpy(logaddr.sun_path+1, "futurama");
bind(log_socket, &logaddr, sun_len);
listen(log_socket, 5);
accept(log_socket, &logaddr, &sun_len);
... // send - receive

Тема # 2:

struct sockaddr_un tolog;
int sock = socket(AF_LOCAL, SOCK_STREAM, 0);
tolog.sun_family = AF_UNIX;
tolog.sun_path[0] = 0;
strcpy(tolog.sun_path+1, "futurama");
connect(sock, (struct sockaddr*)&tolog, sizeof(struct sockaddr_un));

Если все, что я делаю в приведенном выше коде, это изменение sun_path, чтобы не иметь ведущего \ 0, все работает отлично.

прямой выход:

t1: socket(PF_FILE, SOCK_STREAM, 0)         = 0
t1: bind(0, {sa_family=AF_FILE, path=@"futurama"}, 110)
t1: listen(0, 5)
t2: socket(PF_FILE, SOCK_STREAM, 0) = 1
t2: connect(1, {sa_family=AF_FILE, path=@"futurama"}, 110 <unfinished ...>
t2: <... connect resumed> )     = -1 ECONNREFUSED (Connection refused)
t1: accept(0,  <unfinished ...>

Я знаю, что соединение происходит до принятия, это не проблема (я пытался убедиться, что accept () вызывается перед connect (), тот же результат. Кроме того, все в порядке, если в любом случае сокет является "pathname").

Ответы на вопрос(4)

Ваш ответ на вопрос