On Tue, Mar 20, 2012 at 4:50 PM, Pedro Silva <pedro.silva....@gmail.com> wrote: > When I stop the server, the control connection is closed but data transfer > don't. > There is a way to close both connections? > > I need to stop the server (the control and all the data being transfered).
First, sorry for the slow reply. Would the following patch work for you? diff --git a/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServer.java b/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServer.java index 680bd19..254c255 100644 --- a/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServer.java +++ b/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServer.java @@ -115,6 +115,11 @@ public class DefaultFtpServer implements FtpServer { // stop all listeners Map<String, Listener> listeners = serverContext.getListeners(); for (Listener listener : listeners.values()) { + // close all sessions for this listener + for(FtpIoSession session : listener.getActiveSessions()) { + session.close(); + } + listener.stop(); } diff --git a/core/src/main/java/org/apache/ftpserver/impl/FtpIoSession.java b/core/src/main/java/org/apache/ftpserver/impl/FtpIoSession.java index 9f79c3a..609ef93 100644 --- a/core/src/main/java/org/apache/ftpserver/impl/FtpIoSession.java +++ b/core/src/main/java/org/apache/ftpserver/impl/FtpIoSession.java @@ -127,6 +127,8 @@ public class FtpIoSession implements IoSession { * @see IoSession#close() */ public CloseFuture close() { + closeDataConnection(); + return wrappedSession.close(); } @@ -134,9 +136,17 @@ public class FtpIoSession implements IoSession { * @see IoSession#close(boolean) */ public CloseFuture close(boolean immediately) { + closeDataConnection(); + return wrappedSession.close(immediately); } + private void closeDataConnection() { + if (containsAttribute(ATTRIBUTE_DATA_CONNECTION)) { + ((ServerDataConnectionFactory) getAttribute(ATTRIBUTE_DATA_CONNECTION)).closeDataConnection(); + } + } + /** * @see IoSession#containsAttribute(Object) */ /niklas