[Twisted-Python] Strange behavior when transferring large strings

Gabriel Rossetti mailing_lists at evotex.ch
Wed Apr 23 05:11:21 MDT 2008


Jean-Paul Calderone wrote:
> On Wed, 23 Apr 2008 10:41:29 +0200, Gabriel Rossetti 
> <mailing_lists at evotex.ch> wrote:
>> [snip]
>> Ok, so apparently it (Twisted, Python, the OS?) can buffer and send 
>> up to 16k, after that it splits the message up, thus this would 
>> explain the lockup, since the app expects a whole XML message and 
>> can't process the second part correctly. So if I understand it 
>> correctly, even when I use the P/C paradigm, it waits until the 
>> buffer is full before sending the message, so when I get the message 
>> on the other side, I only get part of it, the other half is a new 
>> message/data arrival, and thus like I said above, the XML is not 
>> correct.
>>
>> Does anyone have an idea of how to solve this?
>
> This can't be solved.  From the way you describe it, the software on the
> receiving end is simply broken.  TCP provides no guarantees about how 
> much
> data will be delivered to the recipient at a time, regardless of how much
> is sent at a time.  Every participant along the delivery path between the
> sender and the recipient is allowed to break packets into smaller pieces
> or coalesce packets into larger pieces.  The recipient *must* be able to
> handle incomplete messages by waiting for more bytes.  It must also be 
> able
> to handle packets which contain bytes from more than one message.
>
> There are a number of ways to address this.  Almost all of them involve
> changing the software running on the peer you're sending messages to and
> the protocol the two programs are using to talk to each other.  For
> example, you can send a length prefix before each message allowing the
> recipient to buffer up the correct number of bytes before trying to deal
> with them.
>
> Jean-Paul
>
Thank you Jean-Paul, I'll do something like that then and fix the peer, 
I didn't realize that and thought I could get the message as a whole 
somehow. At lease I know my P/C is working :-)

Gabriel




More information about the Twisted-Python mailing list