> Somebody else will have to take over from this point, as that's about all the 
> help I can offer.

Tired, eh? To subsume our discussion, I will cite RFC-3135 (page 17/18, a bit 
lengthy but definitely worth *careful* reading):

----------------
Another aspect of the end-to-end argument is that of acknowledging the receipt 
of data end-to-end in order to achieve reliable end-to-end delivery of data. An 
application aiming at reliable end-to-end delivery must implement an end-to-end 
check and recovery at the application level. According to the end-to-end 
argument, this is the only possibility to correctly implement reliable 
end-to-end operation. Otherwise the application violates the end-to-end 
argument. This also means that a correctly designed application can never fully 
rely on the transport layer (e.g., TCP) or any other communication subsystem to 
provide reliable end-to-end delivery.

First, a TCP connection may break down for some reason and result in lost data 
that must be recovered at the application level. Second, the checksum provided 
by TCP may be considered inadequate, resulting in undetected (by TCP) data 
corruption [Pax99] and requiring an application level check for data 
corruption. Third, a TCP acknowledgement only indicates that data was delivered 
to the TCP implementation on the other end system. It does not guarantee that 
the data was delivered to the application layer on the other end system. 
Therefore, a well designed application must use an application layer 
acknowledgement to ensure end-to-end delivery of application layer data. Note 
that this does not diminish the value of a reliable transport protocol (i.e., 
TCP) as such a protocol allows efficient implementation of several essential 
functions (e.g., congestion control) for an application.
---------------

How true these words are!

What does it mean? For reliable data transfer:
- does not rely on Send(), Shutdown() or Close() to throw exceptions
- use application-level acknowledgements
- use a good, seperate checksum (CRC-32, for example) for less important data 
(or, a secure environment) or strong cryptography (SSL) for your critical data.

With best regards and wishes of small bit error rates in New 2005,

Marek

===================================
This list is hosted by DevelopMentor�  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to