我有一个ProFTPD FTP服务器(版本:1.3.4d(maint)),可以正常使用现有文件但挂起,直到不存在的文件是“FTP无传输超时”请求。
这是我在请求不存在的文件时在proftpd.log
中看到的内容:
May 20 12:05:04 myhost proftpd[25990] 1.2.3.4 (5.6.7.8[5.6.7.8]): FTP session opened.
May 20 12:05:04 myhost proftpd[25990] 1.2.3.4 (5.6.7.8[5.6.7.8]): USER system: Login successful.
...hangs for 10 Minutes....
May 20 12:15:04 myhost proftpd[25990] 1.2.3.4 (5.6.7.8[5.6.7.8]): Passive data transfer failed, possibly due to network issues
May 20 12:15:04 myhost proftpd[25990] 1.2.3.4 (5.6.7.8[5.6.7.8]): Check your PassivePorts and MasqueradeAddress settings,
May 20 12:15:04 myhost proftpd[25990] 1.2.3.4 (5.6.7.8[5.6.7.8]): and any router, NAT, and firewall rules in the network path.
May 20 12:15:04 myhost proftpd[25990] 1.2.3.4 (5.6.7.8[5.6.7.8]): FTP no transfer timeout, disconnected
May 20 12:15:04 myhost proftpd[25990] 1.2.3.4 (5.6.7.8[5.6.7.8]): ROOT PRIVS: unable to setegid(): Operation not permitted
May 20 12:15:04 myhost proftpd[25990] 1.2.3.4 (5.6.7.8[5.6.7.8]): RELINQUISH PRIVS: unable to seteuid(session.uid): Operation not permitted
May 20 12:15:04 myhost proftpd[25990] 1.2.3.4 (5.6.7.8[5.6.7.8]): FTP session closed.
这些是proftpd.conf
中配置的超时:
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
但是,对同一服务器的现有文件的请求可以正常工作。
有人可以帮我这个吗?
答案 0 :(得分:0)
我的问题出在FTP客户端,而不是FTP服务器。我构建了一个小的FtpTester测试工具,可以重现问题,这似乎是EnterpriseDT的edtFTPj FTP客户端中的一个错误。如果在不存在的文件上打开FTPInputStream并在收到IOException后关闭()它,则close()操作将挂起,直到发生套接字超时。
我在EnterpriseDT的网站上详细描述了这一点,参见http://enterprisedt.com/questions/index.php/11407/ftpinputstream-close-hangs-until-socket-timeout
我通过此解决方法解决了我的问题:在打开FTPInputStream之前,我明确检查文件是否存在。