Использование AF_UNIX с SOCK_DGRAM создает проблему с длиной имени сокета unix - PullRequest
0 голосов
/ 14 декабря 2010

мой вопрос об IPC с использованием AF_UNIX и SOCK_DGRAM.мой серверный код после удаления некоторых проверок ошибок из кода:

 sd = socket(AF_UNIX, SOCK_DGRAM, 0);
 memset(&serveraddr, 0, sizeof(serveraddr));
 serveraddr.sun_family = AF_UNIX;
 strcpy(serveraddr.sun_path, SERVER_PATH);
 length = BUFFER_LENGTH;
 rc = setsockopt(sd, SOL_SOCKET, SO_RCVLOWAT, (char *)&length, sizeof(length));
 rc = bind(sd, (struct sockaddr *)&serveraddr, SUN_LEN(&serveraddr));
 rc = recv(sd, buffer, sizeof(buffer), 0));

мой клиентский код после удаления некоторых проверок ошибок из кода:

 sd = socket(AF_UNIX, SOCK_DGRAM, 0);
 memset(&serveraddr, 0, sizeof(serveraddr));
 serveraddr.sun_family = AF_UNIX;
 strcpy(serveraddr.sun_path, SERVER_PATH);
 memset(buffer, 'a', sizeof(buffer));
 socklen_t server_length = sizeof(struct sockaddr);
 sendto(sd, buffer, sizeof(buffer), 0, (struct sockaddr *)&serveraddr, server_length);

устарелая проблема, которую я вижулежит в определении SERVER_PATH.как только длина моего SERVER_PATH превышает 14 символов, отправка клиентом (...) завершится с ошибкой («Нет такого файла или каталога»).

некоторые замечания:

есть идеи?

1 Ответ

2 голосов
/ 14 декабря 2010

Я подозреваю, что проблема связана с sizeof(struct sockaddr).В моей системе это позволяет 14 символов для поля адреса.Попробуйте sizeof(struct sockaddr_un).

...