问题描述
我有一个使用 WinInet 的 FTP 功能定期上传文件的应用程序。它已运行多年,但于 2021 年 4 月 1 日开始失败。它无法使用 FtpOpenFile 打开状态为 12002 Internet Timeout 的文件。电话看起来像这样..
hiOpenFile = FtpOpenFile(
hiSiteConnect,"TEMP.htm",GENERIC_WRITE,FTP_TRANSFER_TYPE_ASCII,NULL
);
该文件确实是在服务器上创建的。
我想知道这个函数的超时值是多少,是否有办法改变它?
解决方法
我一直收到 FtpOpenFile
和 FtpGetFile
的 12002 Internet Timeout,但在将 INTERNET_FLAG_PASSIVE
标志添加到我的 InternetConnect
调用后,它们现在都可以工作了。
关于超时,通常您会使用 INTERNET_OPTION_CONNECT_TIMEOUT
、INTERNET_OPTION_RECEIVE_TIMEOUT
或 INTERNET_OPTION_SEND_TIMEOUT
和 InternetSetOption
。有关选项标志的详细信息,请参见此处:https://docs.microsoft.com/en-us/windows/win32/wininet/option-flags
然而,由于一个非常古老的 MS 错误,如上设置超时根本没有任何影响。有一种解决方法可以减少超时但不会增加超时。它是通过创建一个新的工作线程并等待它来完成的。文章见这里: https://mskb.pkisolutions.com/kb/224318