Return-Path: X-Original-To: apmail-hc-dev-archive@www.apache.org Delivered-To: apmail-hc-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 2F0BC9207 for ; Fri, 30 Mar 2012 15:27:11 +0000 (UTC) Received: (qmail 58132 invoked by uid 500); 30 Mar 2012 15:27:11 -0000 Delivered-To: apmail-hc-dev-archive@hc.apache.org Received: (qmail 58094 invoked by uid 500); 30 Mar 2012 15:27:11 -0000 Mailing-List: contact dev-help@hc.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "HttpComponents Project" Delivered-To: mailing list dev@hc.apache.org Received: (qmail 58085 invoked by uid 99); 30 Mar 2012 15:27:10 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 30 Mar 2012 15:27:10 +0000 X-ASF-Spam-Status: No, hits=0.7 required=5.0 tests=SPF_NEUTRAL X-Spam-Check-By: apache.org Received-SPF: neutral (athena.apache.org: local policy) Received: from [217.150.250.48] (HELO kalnich.nine.ch) (217.150.250.48) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 30 Mar 2012 15:27:03 +0000 Received: from [192.168.42.175] (unknown [213.55.184.250]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by kalnich.nine.ch (Postfix) with ESMTPSA id DB01EB80547 for ; Fri, 30 Mar 2012 17:26:38 +0200 (CEST) Message-ID: <1333121196.13912.7.camel@ubuntu> Subject: Re: Differentiating Connection Timeouts and Closes From: Oleg Kalnichevski To: HttpComponents Project Date: Fri, 30 Mar 2012 17:26:36 +0200 In-Reply-To: References: <4F132E45.7080705@apache.org> <1326661874.19014.25.camel@ubuntu> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.2- Content-Transfer-Encoding: 7bit Mime-Version: 1.0 X-Virus-Checked: Checked by ClamAV on apache.org On Thu, 2012-03-29 at 10:25 +0530, Hiranya Jayathilaka wrote: > Hi Oleg, > > On Mon, Jan 16, 2012 at 2:41 AM, Oleg Kalnichevski wrote: > > > On Mon, 2012-01-16 at 01:21 +0530, Asankha C. Perera wrote: > > > Hi All > > > > > > When a connection times out or is closed with NIO, I'd like to know if > > > this connection has any content read already or pending - i.e. is the > > > connection timeout or close happening to a partially read connection or > > > to an idle keep-alive connection (I'd like to know even if some headers > > > have been read.. not just entity content..) > > > > > > I was not able to find any safe way to achieve this yet.. Have I missed > > > anything obvious? > > > > > > thanks > > > asankha > > > > > > > Hi Asankha > > > > Timeout event fired by an I/O reactor simply signals the fact that there > > has been no activity on that I/O session for the given timeout period. > > The I/O session itself remains in a perfectly valid state. It is up to > > individual protocol handlers to decide what is to be done with that > > session. The default implementations simply close the timed out session > > but it does not have to be that way. > > > > As far as closed I/O sessions are concerned, if closed by the opposite > > end, the I/O session can still be read from as long as there is pending > > data. Once all input has been received read operations on that session > > will start returning -1 indicating the connection is being in a > > half-closed state. It is still up to individual protocol handlers to > > decide what is to be done with the session. Closing it on the local end > > is the most natural choice. > > > > This is very interesting. Does this mean that whenever the closed event is > fired on a client handler, there is a chance that the connection many have > some pending data? For an example if we are in the middle of a > request-response interaction, and the closed event is fired even before the > responseReceived event, is there a possibility that the response may be > received if we keep the connection open? > Hiranya The closed event fires only if the connection has been _explicitly_ closed on the local end. So, to answer your question there can still be some data stuck in the session buffer, but this can only happen if the protocol hander closed the connection without consuming all data available. Hope this answers your question. Oleg > Thanks, > Hiranya > > > > > > Both cases are quite easy to distinguish. Hope this answers your > > question. > > > > Cheers > > > > Oleg > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org > > For additional commands, e-mail: dev-help@hc.apache.org > > > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org For additional commands, e-mail: dev-help@hc.apache.org