debugging the protocol

Havoc Pennington hp at redhat.com
Thu Jun 14 16:35:46 PDT 2007


Hi,

Simon Burton wrote:
> One thing I am curious about. The actual message body is not
> null padded. This means when we get multiple messages from one
> network read, we may get mis-aligned messages. In my code I detect
> this situation and just copy the message to an 8-byte aligned
> location. Wouldn't it make more sense to pad each message so
> we don't have this problem ?
> 

Probably, but it's too late to change due to back compat issues.

You can perhaps avoid the copies if you are willing to make your life 
complicated, because the message header has the message length in the 
initial fixed-length portion of the header. The length of the body is a 
UINT32, and the length of the header itself is at the start of the array 
of header fields (arrays include their length in bytes).

So, the series of reads would be:

  read_initial_part_of_header() -> store length
  read (remaining length of current message)
  read_initial_part_of_header() -> store length
  read (remaining length of current message)

and so forth. To avoid two reads per message, you might be able to do 
something with readv() to read the known message length into one buffer 
and the next header into a second buffer in a single syscall.

I would certainly start by doing something simpler though until you 
learn that this is truly a performance issue in your app.

Havoc



More information about the dbus mailing list