wpa_supplicant的UNIX域的进程间通信

wpa_ctrl_open(const char *ctrl_path)这个函数的socket(),bind(),connect()这三个函数;
在应用程序会调用两次wpa_ctrl_open(),创建一个ctrl和一个monitor,这个还好理解;这是控制口的结构:

 struct wpa_ctrl {
    ....
    int s;
    struct sockaddr_un local; 
    struct sockaddr_un dest;
    ....
    };

首先创建一个sockfd,再将它与local绑定,local的path是wpa的一个什么路径不大懂,而后面又用dest也就传入到wpa_ctrl_open()里面的ctrl_path路径,问题:
1. local表示的是什么意思?
2. unix daemon IPC 为什么有个local了还要有个dest?
3. 为什么bind()和connect()不是同一个地点?
4. 这两个路径怎么通信?
我在wpa_cli的代码里

static void wpa_cli_interactive(void)
{
#define max_args 10
    char cmdbuf[256], *cmd, *argv[max_args], *pos;
    int argc;

    printf("\nInteractive mode\n\n");

    do {
        //wpa_cli_recv_pending(mon_conn, 0, 0);
        ALOG("wpa_cli_recv_pending----1");
        alarm(ping_interval);
        printf("==== ping_interval = %d =====\n",ping_interval); //ALOG()
        printf("> ");
        cmd = fgets(cmdbuf, sizeof(cmdbuf), stdin);
        alarm(0);
        if (cmd == NULL)
            break;
        //wpa_cli_recv_pending(mon_conn, 0, 0);
        ALOG("wpa_cli_recv_pending----2");
        pos = cmd;
        while (*pos != '\0') 
        {
            if (*pos == '\n') 
            {
                *pos = '\0';
                break;
            }
            pos++;
        }
        argc = 0;
        pos = cmd;
        for (;;) 
        {
            while (*pos == ' ')
                pos++;
            if (*pos == '\0')
                break;
            argv[argc] = pos;
            argc++;
            if (argc == max_args)
                break;
            if (*pos == '"') 
            {
                char *pos2 = os_strrchr(pos, '"');
                if (pos2)
                    pos = pos2 + 1;
            }
            while (*pos != '\0' && *pos != ' ')
                pos++;
            if (*pos == ' ')
                *pos++ = '\0';
        }
        {
            int i=0;
            for(i=0;i<argc;i++)
            {
                printf("#######  %s\n",argv[i]);
            }
        }
        if (argc)
            wpa_request(ctrl_conn, argc, argv);

        if (cmd != cmdbuf)
            free(cmd);
    } while (!wpa_cli_quit);
}

把两个地方的wpa_cli_recv_pending()都屏蔽掉了,但是通过另一个wpa_cli应用向wpa_supplicant发disable_net的命令,原来的wpa_cli还是能够很快收到monitor的信息,这是在哪监听到的;
这个消息是从wpa_cli_recv_pending()打印出来的,不确定是不是因为alarm()的原因;如果是的话,为什么很快就能接到消息呢?他不是有个定时时间的吗?而且我把原来的定时时间从5s改到了10s,也能很快接到,所以觉得是不是,一直在监听?

希望各位指点下!

help 啊!!!!!!!!!!!!