如何在 PF_UNIX 套接字的服务器端打印客户端 sun_paths 名称?

How can I print client sun_paths name at server side in PF_UNIX socket?

#define NAME "server"
main() 
{ 

    int sock, msgsock, rval;

    int pid,len; 
    struct sockaddr_un server,clientv;
    char bufRead[1024];
    char bufWrite[1024];
    unlink(NAME);   
    sock = socket(AF_UNIX, SOCK_STREAM, 0); 

    if (sock < 0) 
    {  
        perror("opening stream socket");
        exit(1);
    }

    server.sun_family = AF_UNIX;
    strcpy(server.sun_path, NAME);

    if (bind(sock, (struct sockaddr *) &server, sizeof(struct sockaddr_un))) 
    {
        perror("binding stream socket");
        exit(1);
    }
    printf("Socket has name %s\n", server.sun_path);


    listen(sock, 5);
    msgsock = accept(sock, (struct sockaddr *)&clientv, &len);
    if (msgsock == -1)
        perror("accept");


        printf("clientv add %s\n",clientv.sun_path);
}

但是当我连接客户端时给出输出:

Socket has name server

clientv add LK�ĿX�MK

accept() 没有填写.sun_path,所以你需要使用getsockname() 手动获取它。应该是这样的:

struct sockaddr_storage storage;
socklen_t storage_len = sizeof(struct sockaddr_storage);

struct sockaddr_un *clientv = (struct sockaddr_un *)&storage;
if (0 == getsockname(sock, (struct sockaddr *)&clientv, &storage_len)) {
        printf("clientv add %s\n", clientv.sun_path);
}