Mach_msg 收发信息


#1

使用mach_msg 向remote port 发送消息之前是不需要协商端口的吗?
我看到在stackoverflow上有个问题

这个问题中获取port,如下

    err = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &port);
    if(err != KERN_SUCCESS)
    {
        mach_error("Can't allocate mach port\n", err);
        return (-1);
    }

    err = mach_port_insert_right(mach_task_self(), port, port,
                                 MACH_MSG_TYPE_MAKE_SEND);
    if(err != KERN_SUCCESS)
    {
        mach_error("Can't insert port right\n", err);
        return (-1);
    }

然后直接就填到了remoteport项,那么mach_msg怎么知道往那个进程发?


#2

http://iphonedevwiki.net/index.php/LightMessaging


#3

这个是在使用之前register了一个port,然后使用这个port

跟stackoverflow不一样啊,这个是在本进程直接allocate了一个port,给一个send 权限,然后就直接往这个port发了


#4

我觉得这个只是所谓的 Minimal, Complete, and Verifiable example

并没有包含recv部分,这样创建的mach port其他进程怎么取得到


#5

应该就是这样了
不然,没道理能用


#6

明显写的有问题。。正确流程是先用bootstrap_look_up去查service的端口号,接着向查到的端口号发送register, 会返回一个新分配的server端口,接着再通过那个server端口进行数据通信。