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

#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有名字服务器

clientv添加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); }