001/* 002 * ==================================================================== 003 * Licensed to the Apache Software Foundation (ASF) under one 004 * or more contributor license agreements. See the NOTICE file 005 * distributed with this work for additional information 006 * regarding copyright ownership. The ASF licenses this file 007 * to you under the Apache License, Version 2.0 (the 008 * "License"); you may not use this file except in compliance 009 * with the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, 014 * software distributed under the License is distributed on an 015 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 016 * KIND, either express or implied. See the License for the 017 * specific language governing permissions and limitations 018 * under the License. 019 * ==================================================================== 020 * 021 * This software consists of voluntary contributions made by many 022 * individuals on behalf of the Apache Software Foundation. For more 023 * information on the Apache Software Foundation, please see 024 * <http://www.apache.org/>. 025 * 026 */ 027package org.apache.http.conn; 028 029import java.io.IOException; 030 031/** 032 * Interface for releasing a connection. This can be implemented by various 033 * "trigger" objects which are associated with a connection, for example 034 * a {@link EofSensorInputStream} or the {@link ManagedHttpClientConnection} itself. 035 * <p> 036 * The methods in this interface can safely be called multiple times. 037 * The first invocation releases the connection, subsequent calls 038 * are ignored. 039 * 040 * @since 4.0 041 */ 042public interface ConnectionReleaseTrigger { 043 044 /** 045 * Releases the connection with the option of keep-alive. This is a 046 * "graceful" release and may cause IO operations for consuming the 047 * remainder of a response entity. Use 048 * {@link #abortConnection abortConnection} for a hard release. The 049 * connection may be reused as specified by the duration. 050 * 051 * @throws IOException 052 * in case of an IO problem. The connection will be released 053 * anyway. 054 */ 055 void releaseConnection() 056 throws IOException; 057 058 /** 059 * Releases the connection without the option of keep-alive. 060 * This is a "hard" release that implies a shutdown of the connection. 061 * Use {@link #releaseConnection()} for a graceful release. 062 * 063 * @throws IOException in case of an IO problem. 064 * The connection will be released anyway. 065 */ 066 void abortConnection() 067 throws IOException; 068 069}