FTP服务器何时接受来自客户端的被动数据连接?

Qui*_*ncy 2 c ftp

我在c中使用一个简单的ftp服务器.我不知道ftp服务器何时接受来自客户端的被动数据连接.据我所知,ftp是被动的:

  1. 客户端向服务器发送"PASV"命令
  2. server创建并绑定套接字,并侦听随机端口.
  3. 服务器使用getsockname来获取随机端口
  4. 以格式组装被动回复消息:227进入被动模式(a1,a2,a3,a4,a5,a6).注意:服务器ip是a1.a2.a3.a4,端口号是:a5*256 + a6.

我的问题是:什么时候ftp服务器接受连接到所述随机端口?发送回复后服务器应该接受数据连接吗?或者ftp服务器是否应该在需要数据连接之前接受连接,即客户端请求文件?

我有RFC959.还有其他有用的ftp资源吗?谷歌不是特别有帮助.

提前致谢

Gre*_*ill 5

发送227回复之前,我会让服务器开始接受该端口上的连接(通过调用listen()).如果您等到发送227后,客户端可能会在您接受连接之前尝试连接,并收到"连接被拒绝"错误.

在调用listen()启动TCP系统监听之后,您可以accept()在准备开始接受连接时进行呼叫.何时调用这是一个应用程序级决策(但显然一旦客户端发送数据传输命令,它就会想要连接).来自客户端的连接将在接受队列中等待,直到服务器实际调用accept(),从而将它们从接受队列中删除.