Index: org/apache/james/transport/mailets/ClamAVScan.java =================================================================== --- org/apache/james/transport/mailets/ClamAVScan.java (revision 483856) +++ org/apache/james/transport/mailets/ClamAVScan.java (working copy) @@ -21,6 +21,7 @@ package org.apache.james.transport.mailets; +import org.apache.james.util.io.IOUtil; import org.apache.mailet.RFC2822Headers; import org.apache.mailet.GenericMailet; import org.apache.mailet.Mail; @@ -681,31 +682,11 @@ log("Exception caught calling CLAMD on " + socket.getInetAddress() + ": " + ex.getMessage(), ex); throw new MessagingException("Exception caught", ex); } finally { - try { - if (reader != null) { - reader.close(); - } - } catch (Throwable t) {} - try { - if (writer != null) { - writer.close(); - } - } catch (Throwable t) {} - try { - if (bos != null) { - bos.close(); - } - } catch (Throwable t) {} - try { - if (streamSocket != null) { - streamSocket.close(); - } - } catch (Throwable t) {} - try { - if (socket != null) { - socket.close(); - } - } catch (Throwable t) {} + IOUtil.shutdownReader(reader); + IOUtil.shutdownWriter(writer); + IOUtil.shutdownStream(bos); + IOUtil.shutdownSocket(streamSocket); + IOUtil.shutdownSocket(socket); } } Index: org/apache/james/util/io/IOUtil.java =================================================================== --- org/apache/james/util/io/IOUtil.java (revision 483856) +++ org/apache/james/util/io/IOUtil.java (working copy) @@ -33,6 +33,7 @@ import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; +import java.net.Socket; /** * General IO Stream manipulation. @@ -210,6 +211,27 @@ } } + /** + * Unconditionally close an InputStream. + * Equivalent to {@link Socket#close()}, except any exceptions will be ignored. + * @param input A (possibly null) InputStream + */ + public static void shutdownSocket( final Socket socket ) + { + if( null == socket ) + { + return; + } + + try + { + socket.close(); + } + catch( final IOException ioe ) + { + } + } + /////////////////////////////////////////////////////////////// // Core copy methods ///////////////////////////////////////////////////////////////