How to handle corrupt messages arriving on a socket?
Posted
by Pieter
on Stack Overflow
See other posts from Stack Overflow
or by Pieter
Published on 2010-04-19T09:48:25Z
Indexed on
2010/04/19
9:53 UTC
Read the original article
Hit count: 709
socket-programming
|text-parsing
I've got a working socket handling mechanism, similar (but a bit more complex) to Qt's Fortune Example
http://qt.nokia.com/doc/4.5/network-fortuneclient.html
http://qt.nokia.com/doc/4.5/network-fortuneserver.html
Now I'm wondering how to handle corrupt messages. Discarding the data is a start, but I need to discard up to a point I can start processing messages again. The corrupt message may be lost, but I need to be able to recover from it. I've got the following idea in mind:
Put a fixed header at the start of each message, eg. 0xABCDEF01. When recovering, lookup this header and restart handling incoming messages.
=> Break off readFortune() on a timeout and recover
=> When encountering an inconsistent header, recover
A huge blocksize is still going to be a problem. To fix that, I should be constantly checking whether or not I'm reading gibberish, but this is not always possible. I can also limit the blocksize on certain message-types.
Any ideas on this? Any proposals on what to use as byteword?
© Stack Overflow or respective owner