如何在linux上设置socket的keepAlive

时间:2012-07-26 17:48:32

标签: sockets timeout

我正在尝试使用apache FtpCiient下载一个大文件,并且我每2小时不断超时。 所以,我设置了FTPClient.setDataTimeout(readTimeoutInMs);到3个小时

它适用于Windows但不适用于Linux。

我在JavaDocs SocketClient.setKeepAlive() -

中看到了这一点

在当前打开的套接字上设置SO_KEEPALIVE标志。从Javadocs开始,默认的keepalive时间是2小时(尽管这取决于实现)。看起来Windows WSA套接字实现允许设置特定的keepalive值,虽然在其他系统上似乎并非如此。

那么,我的readTimeout = 3hours在linux上无效吗?我该怎么办?

谢谢,

1 个答案:

答案 0 :(得分:1)

你混淆了几件事。 Keepalive和读取超时不是一回事。

  • Keepalive是一种用于检测死连接的TCP协议技巧,例如对于Telnet服务器。默认情况下它处于关闭状态,默认测试间隔为两小时。对于有效的FTP连接,我怀疑打开它会产生任何不同。

  • 如果超时时间内没有收到任何数据,则读取超时会导致读取操作超时。它适用于每个人阅读。

  • 您引用的FTP数据超时可能是其他内容,例如:总转移超时。您必须查看其文档以确定。