请求不存在的文件时FTP服务器挂起(“FTP无传输超时”)

请求不存在的文件时FTP服务器挂起(“FTP无传输超时”),ftp,proftpd,Ftp,Proftpd,我有一个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

我有一个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
但是,对同一服务器的现有文件请求可以正常工作


有人能帮我吗

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

我在EnterpriseDT的网站上详细描述了这一点,参见


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

FTP客户端在命令/响应方面看到了什么?我使用“edtftpj”,一个Java客户端。客户端成功连接到FTP服务器,设置对不存在文件的请求,然后在60秒后由于套接字超时而出现异常。这是我看到的堆栈跟踪:
由以下原因引起:java.io.IOException:/somedir/non_existing:com.enterprisedt.net.ftp.AbstractFTPInputStream.start(AbstractFTPInputStream.java:117)在com.enterprisedt.net.ftp.AbstractFTPInputStream.start(AbstractFTPInputStream.java:95)没有这样的文件或目录在com.enterprisedt.net.ftp.ftpbinarynputstream.read(ftpbinarynputstream.java:139)
我问的是ftp命令/响应,而不是堆栈跟踪。但是考虑到stacktrace,也许您的客户机代码需要以不同的方式处理其中一些错误?