Четко говорит датаграмма, но вы предлагаете подключение. Любая причина?

аюсь написать простой сервер / клиент дейтаграмм Unix, и у меня возникли некоторые проблемы. Мне нужен сервер, который прослушивает сокет дейтаграммы и отправляет ответ на каждое полученное сообщение исходному отправителю. Я решил сначала попробовать с помощьюsocat чтобы быть "сервером" и писать клиент на C. Я запускаю socat так:

socat UNIX-DGRAM:/tmp/test.socket,fork EXEC:echo

Насколько я понимаю, это должно слушать/tmp/test.socket и ответить на все, что получено с той же строкой? Затем у меня есть клиентская программа, которая выглядит так (проверка ошибок удалена для ясности):

int s = socket(AF_UNIX, SOCK_DGRAM, 0);
struct sockaddr_un sa;
sa.sun_family = AF_UNIX;
strcpy(sa.sun_path, "/tmp/test.socket");

const char *data = "Testing data";
int err = sendto(s, data, strlen(data), 0, (struct sockaddr *)(&sa), sizeof(struct sockaddr_un));

printf("Sent!\n");

unsigned char *buffer = malloc(BUFFER_LENGTH);
struct sockaddr_storage recv_sa;
int recv_sa_len = 0;
int recv_len = recvfrom(s, buffer, BUFFER_LENGTH, 0, (struct sockaddr *)&recv_sa, &recv_sa_len);

for (int i = 0; i < recv_len; i++) {
    putc(buffer[i], stdout);
}
printf("\n");

Он должен отправить пакет (который работает), получить пакет, а затем распечатать его, но программа, похоже, не способна принять пакет. Что я здесь не так делаю, или у меня есть фундаментальное недопонимание о сокетах Unix? Спасибо!

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

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