Hi I'm developing a server/client system and would like to use the MACH_NOTIFY_DEAD_NAME system so that the server can know when clients disappear abnormally (crash...) On the server side : Registration of the server port: ...... ...... mach_port_t task = mach_task_self(); if (task_get_bootstrap_port(task, &fBootPort) != KERN_SUCCESS) { printf("AllocatePort: Can't find bootstrap mach port"); return false; } if (mach_port_allocate(task, MACH_PORT_RIGHT_RECEIVE, &fServerPort) != KERN_SUCCESS) { printf("AllocatePort: can't allocate mach port"); return false; } if (mach_port_insert_right(task, fServerPort, fServerPort, MACH_MSG_TYPE_MAKE_SEND) != KERN_SUCCESS) { printf("AllocatePort: error inserting mach rights"); return false; } if (bootstrap_register(fBootPort, "server", fServerPort) != KERN_SUCCESS) { printf("Allocate: can't check in mach port"); return false; } ...... ...... Then in a thread to get messages coming from clients: boolean_t server_demux(mach_msg_header_t *Request,mach_msg_header_t *Reply) { printf("received message on port %x\n", Request->msgh_local_port); ..... ..... return TRUE; } kern_return_t res = mach_msg_server(server_demux,1024,fServerPort,0); On the client side : Connection to the server port: ...... ...... mach_port_t task = mach_task_self(); if (task_get_bootstrap_port(task, &fBootPort) != KERN_SUCCESS) { printf("ConnectPort: can't find bootstrap port"); return false; } if (bootstrap_look_up(fBootPort, "server", &fServerPort) != KERN_SUCCESS) { printf("ConnectPort: can't find mach server port"); return false; } ...... ...... This works correctly to use MIG generated RPC between the clients and the server. Then I'm trying to add a dead notification to notify the server when clients disappear : On the client side : mach_port_t server_port; mach_port_t old_port; if (task_for_pid(mach_task_self(),getpid(),&server_port) != KERN_SUCCESS) { printf("NotifyDead: can't find mach task_for_pid"); return false; } kern_return_t result; if ((result = mach_port_request_notification(mach_task_self(),server_port, MACH_NOTIFY_DEAD_NAME, 0,fServerPort,MACH_MSG_TYPE_MAKE_SEND_ONCE, &old_port)) != KERN_SUCCESS) { printf("NotifyDead %s\n",mach_error_string(result)); return false; } But I always get a "NotifyDead (ipc/send) invalid port right" error message. Any idea of what is wrong? Is is the right way to do? Any link to code/examples that implements this correctly? Thanks Stephane Letz _______________________________________________ darwin-development mailing list | darwin-development@lists.apple.com Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/darwin-development Do not post admin requests to the list. They will be ignored.