-1

我有一个 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

但是,对同一服务器的现有文件的请求工作正常。

有人可以帮我吗?

4

1 回答 1

0

我的问题出在 FTP 客户端,而不是 FTP 服务器。我建了一个小的 FtpTester 测试工具,可以复现问题,这似乎是 EnterpriseDT 的 edtFTPj FTP 客户端的一个 bug。如果在不存在的文件上打开 FTPInputStream 并在收到 IOException 后关闭它,则 close() 操作将挂起,直到发生套接字超时。

我在 EnterpriseDT 的网站上详细描述了这一点,参见。http://enterprisedt.com/questions/index.php/11407/ftpinputstream-close-hangs-until-socket-timeout

我用这个解决方法解决了我的问题:在打开 FTPInputStream 之前,我明确检查文件是否存在。

于 2016-06-02T13:56:45.043 回答