[
https://issues.apache.org/jira/browse/NET-510?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Joe Hammerbacher updated NET-510:
---------------------------------
Description:
Background:
I'm attempting to add some level of fault tolerance to an application that uses
FTPSClient to transfer files. If the connection between the client and server
fails, I'd like to capture the produced exception/return code, log the details,
and attempt to reconnect/retry the transfer.
What works:
The retrieveFile() method. If the connection fails, (i.e. I disable the
server's public interface), I receive a CopyStreamException caused by a
SocketTimeoutException after the amount of time I specified as the timeout.
Which makes sense if SO_TIMEOUT is getting set correctly...
>From the Javadocs:
"Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. With
this option set to a non-zero timeout, a read() call on the InputStream
associated with this Socket will block for only this amount of time. If the
timeout expires, a java.net.SocketTimeoutException is raised, though the Socket
is still valid. The option must be enabled prior to entering the blocking
operation to have effect. The timeout must be > 0. A timeout of zero is
interpreted as an infinite timeout."
What doesn't work (as expected):
The storeFile() method. If I initiate a transfer via storeFile() and disable
the NIC on the server, the storeFile() method blocks/hangs indefinitely without
throwing any exceptions. I think that this is the result of nothing listening,
on the client side, to the DataSocket, which makes sense because I don't think
there is anything being sent back to the client over the DataSocket.
So, it doesn't appear to be possible for the write() to ever timeout if the
connection fails.
Am I missing something?
Thanks,
Joe
was:
Background:
I'm attempting to add some level of fault tolerance to an application that uses
FTPSClient to transfer files. If the connection between the client and server
fails, I'd like to capture the produced exception/return code, log the details,
and attempt to reconnect/retry the transfer.
What works:
The retrieveFile() method. If the connection fails, (i.e. I disable the
server's public interface), I receive a CopyStreamException caused by a
SocketTimeoutException after the amount of time I specified as the timeout.
Which makes sense if SO_TIMEOUT is getting set correctly...
>From the Javadocs:
"Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. With
this option set to a non-zero timeout, a read() call on the InputStream
associated with this Socket will block for only this amount of time. If the
timeout expires, a java.net.SocketTimeoutException is raised, though the Socket
is still valid. The option must be enabled prior to entering the blocking
operation to have effect. The timeout must be > 0. A timeout of zero is
interpreted as an infinite timeout."
What doesn't work (as expected):
The storeFile() method. If I initiate a transfer via storeFile() and disable
the NIC on the server, the storeFile() method blocks/hangs indefinitely without
throwing any exceptions. I think that this is the result of nothing listening
on the DataSocket, which makes sense because I don't think there is anything
being sent back to the client over the DataSocket.
So, it doesn't appear to be possible for the write() to ever timeout if the
connection fails.
Am I missing something?
Thanks,
Joe
> FTPSClient.storeFile() hangs indefinitely if network connection fails
> ---------------------------------------------------------------------
>
> Key: NET-510
> URL: https://issues.apache.org/jira/browse/NET-510
> Project: Commons Net
> Issue Type: Bug
> Components: FTP
> Affects Versions: 3.3
> Environment: Java 7, CentOS 6.4, commons.net 3.3
> Reporter: Joe Hammerbacher
> Priority: Blocker
> Labels: newbie
>
> Background:
> I'm attempting to add some level of fault tolerance to an application that
> uses FTPSClient to transfer files. If the connection between the client and
> server fails, I'd like to capture the produced exception/return code, log the
> details, and attempt to reconnect/retry the transfer.
> What works:
> The retrieveFile() method. If the connection fails, (i.e. I disable the
> server's public interface), I receive a CopyStreamException caused by a
> SocketTimeoutException after the amount of time I specified as the timeout.
> Which makes sense if SO_TIMEOUT is getting set correctly...
> From the Javadocs:
> "Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. With
> this option set to a non-zero timeout, a read() call on the InputStream
> associated with this Socket will block for only this amount of time. If the
> timeout expires, a java.net.SocketTimeoutException is raised, though the
> Socket is still valid. The option must be enabled prior to entering the
> blocking operation to have effect. The timeout must be > 0. A timeout of zero
> is interpreted as an infinite timeout."
> What doesn't work (as expected):
> The storeFile() method. If I initiate a transfer via storeFile() and disable
> the NIC on the server, the storeFile() method blocks/hangs indefinitely
> without throwing any exceptions. I think that this is the result of nothing
> listening, on the client side, to the DataSocket, which makes sense because I
> don't think there is anything being sent back to the client over the
> DataSocket.
> So, it doesn't appear to be possible for the write() to ever timeout if the
> connection fails.
> Am I missing something?
> Thanks,
> Joe
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira