2015-09-10 57 views
2
#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); 
} 

但是当我连接客户端给出了输出:如何在PF_UNIX套接字的服务器端打印客户端sun_paths名称?

套接字名称服务器

clientv添加LKĿXMK

回答

2

接受()不填.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); 
} 
+0

谢谢......这是工作 –

相关问题