help-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Trying to understand Mach IPC


From: Manu Valderrama
Subject: Re: Trying to understand Mach IPC
Date: Mon, 10 Jun 2002 16:31:43 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020529

Manuel Menal wrote:

Sun, 09 Jun 2002 22:56:35 +0200, you wrote:
> Hello! I would need some help with Mach IPC ( without using MIG, only the
> syscalls for IPC ); I was writing
> some example programs with the purpose to learn about Mach IPC, and now I'm
> blocked and don't know
> how to continue. I hope that somewhat could help me in this mailing list.

That is probably a good place to ask help. :-)

Thanks for your answer, it has been somewhat useful ;-) , but not completly, :-( !!

>  the gnumach reference manuals, and "A
> programmer's guide to the mach
> system calls", that treats about mach 2.5 IPC wo MIG;

Never heard of that book. Is it still published?

You can obtain it from here :

http://www-2.cs.cmu.edu/afs/cs/project/mach/public/www/doc/tutorials.html

I've tried to update the code with the description of the mach_msg function, and the mach_msg_header_t and mach_msg_type_t structures described in the kernel interfaces
document that you have mencioned.

That seems the right way to me. At least, the idea is correct. Not sure
you filled the right fields with the correct values, though ;-)
Yes, that's my problem!


Just before I try to see what's wrong with your code: could you please
use the GNU Coding Standards[1] ? That would make your code so easier :).
Sorry!!... it was a little example written for learning purposes; I have changed the code again, but I still didn't adhere to GNU coding standards, since I had not enoungh time in this lunch time break!
Don't worry, I'll follow your advices. Thanks ;-) !

>     /* Header of the message : */  
        
>     my_message.head.msgh_size = sizeof(struct simple_message);
        
>     /* my_message.head.msgh_local_port = mach_task_self(); */
>     my_message.head.msgh_local_port = MACH_PORT_NULL;
>     my_message.head.msgh_remote_port = my_port;
>     /* my_message.head.msgh_id = 0x1234; */

You must fill some other fields too. msgh_bits _must_ be filled with the
appropriate value. You should read « Mach 3 Kernel Interfaces » [2],
page 327.

Aha! I have made some changes to the original program with the purpose
of obtaining what is the error that happens :

   /* OK, time to send the message : */
err = mach_msg( &(my_message.head), MACH_SEND_MSG, my_message.head.msgh_size, 0, MACH_PORT_NULL, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL );
                        
   /* Error analysis : */
   if( err == MACH_MSG_SUCCESS )
        printf( "Success : the message was queued\n" );
   else if( err == MACH_SEND_MSG_TOO_SMALL )
        printf( "Error : send_size smaller than the minimum\n" );
   else if( err == MACH_SEND_NO_BUFFER )
        printf( "Error : there was some resource shortage on the system\n" );
   else if( err == MACH_SEND_INVALID_DATA )
        printf( "Error : buffer message not readable\n" );
   else if( err == MACH_SEND_INVALID_HEADER )
        printf( "Error : msgh_bits value is invalid\n" );
   else
        printf( "Error : code returned is %d\n", err );


and, as you have pointed, I get a "MACH_SEND_INVALID_HEADER" error code!
I have tried some few things to fill this msgh_bits field correctly, but I'm afraid that I'm still not prepared; some help will be apreciated, but maybe it would be more interesting that me by-myself try todiscover how to fill correctly this field.

Oh, and. Your example looks like the one described in
http://web.walfield.org/pub/people/neal/papers/hurd-misc/mach-ipc-without-mig.txt,
except that it has no threads. You should have a look at it, it has good
explainations, and good references. Don't look at the solution, that
would be cheating! :-)

Bye,

Of course I'm trying to solve that problem, but I decided to go step by step. Then in my first
tries there are no threads created.

I'm thinking that maybe another source of problems would come because
the program has no rights to send a message to the port I have already created....
but no idea!, I'm just a newbie in Mach Programming!


[1]: http://www.gnu.org/prep/standards_toc.html
[2]: http://www-2.cs.cmu.edu/afs/cs/project/mach/public/www/doc/osf.html

This time better no to torture nobody sending the source of my programs;
anyway I have no made many changes!

Thanks for the Help!







reply via email to

[Prev in Thread] Current Thread [Next in Thread]