From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Mon, 18 Jun 2001 19:49:06 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Mon, 18 Jun 2001 19:48:46 -0400 Received: from turnover.lancs.ac.uk ([148.88.17.220]:63480 "EHLO helium.chromatix.org.uk") by vger.kernel.org with ESMTP id ; Mon, 18 Jun 2001 19:48:42 -0400 Mime-Version: 1.0 Message-Id: In-Reply-To: In-Reply-To: Date: Tue, 19 Jun 2001 00:43:32 +0100 To: dean gaudet From: Jonathan Morton Subject: Re: Client receives TCP packets but does not ACK Cc: Jan Hudec , Content-Type: text/plain; charset="us-ascii" ; format="flowed" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org > > > > Btw: can the aplication somehow ask the tcp/ip stack what was >> >actualy acked? >> >> (ie. how many bytes were acked). >> > >> >no, but it's not necessarily a useful number anyhow -- because it's >> >possible that the remote end ACKd bytes but the ACK never arrives. so you >> >can get into a situation where the remote application has the entire >> >message but the local application doesn't know. the only way to solve >> >this is above the TCP layer. (message duplicate elimination using an >> >unique id.) >> >> No, because if the ACK doesn't reach the sending machine, the sender >> will retry the data until it does get an ACK. > >if the network goes down in between, the sender may never get the ACK. >the sender will see a timeout eventually. the receiver may already be >done with the connection and closed it and never see the error. if it >were a protocol such as SMTP then the sender would retry later, and the >result would be a duplicate message. (which you can eliminate above the >TCP layer using unique ids.) But, if the sender does not attempt to close the socket until the ACK returns, then the receiver will see an unfinished connection and (hopefully) realise that the message is unsafe and not attempt to send it. With SMTP, the last piece of data is a QUIT anyway, which occurs after the end-of-message marker - once the QUIT is sent and/or received, both ends know that the connection is finished with and will close the socket independently of each other. If the network disappears before the QUIT comes along, the receiver should be discarding messages and the sender retrying later. -- -------------------------------------------------------------- from: Jonathan "Chromatix" Morton mail: chromi@cyberspace.org (not for attachments) website: http://www.chromatix.uklinux.net/vnc/ geekcode: GCS$/E dpu(!) s:- a20 C+++ UL++ P L+++ E W+ N- o? K? w--- O-- M++$ V? PS PE- Y+ PGP++ t- 5- X- R !tv b++ DI+++ D G e+ h+ r++ y+(*) tagline: The key to knowledge is not to rely on people to teach you it.