I had a
similar problem. When you create a Net::FTP object you can set a Timeout value. If the connection times out, you can trap the error and try to get the file again or re-login and start all over.
I put the Net::FTP->get() call in an eval block so I could look at $@. If $@ contains something like "Timeout at ... FTP.pm' then I start all over again.
I had special reasons for doing that (I needed to know if the server timed out or if there was some other error) but you could probably just do something like birdbrane does in his reply to my node. Net::FTP->get will return an error if it does not succeed.