WinInet FtpOpenFile 超时

问题描述

我有一个使用 WinInet 的 FTP 功能定期上传文件的应用程序。它已运行多年,但于 2021 年 4 月 1 日开始失败。它无法使用 FtpOpenFile 打开状态为 12002 Internet Timeout 的文件。电话看起来像这样..

    hiOpenFile = FtpOpenFile(
        hiSiteConnect,"TEMP.htm",GENERIC_WRITE,FTP_TRANSFER_TYPE_ASCII,NULL
    );

文件确实是在服务器上创建的。

我想知道这个函数的超时值是多少,是否有办法改变它?

解决方法

我一直收到 FtpOpenFileFtpGetFile 的 12002 Internet Timeout,但在将 INTERNET_FLAG_PASSIVE 标志添加到我的 InternetConnect 调用后,它们现在都可以工作了。

关于超时,通常您会使用 INTERNET_OPTION_CONNECT_TIMEOUTINTERNET_OPTION_RECEIVE_TIMEOUTINTERNET_OPTION_SEND_TIMEOUTInternetSetOption。有关选项标志的详细信息,请参见此处:https://docs.microsoft.com/en-us/windows/win32/wininet/option-flags

然而,由于一个非常古老的 MS 错误,如上设置超时根本没有任何影响。有一种解决方法可以减少超时但不会增加超时。它是通过创建一个新的工作线程并等待它来完成的。文章见这里: https://mskb.pkisolutions.com/kb/224318