WinInet FtpOpenFile 超时

Posted

技术标签:

【中文标题】WinInet FtpOpenFile 超时【英文标题】:WinInet FtpOpenFile timeout 【发布时间】:2021-04-19 21:41:25 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

FtpOpenFileFtpGetFile 一直收到 12002 Internet Timeout,但在我的 InternetConnect 调用中添加 INTERNET_FLAG_PASSIVE 标志后,两者现在都可以正常工作。

关于超时,通常您会使用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

【讨论】:

以上是关于WinInet FtpOpenFile 超时的主要内容,如果未能解决你的问题,请参考以下文章

WinInet:FTP put 中的超时管理

FtpGetFile WinINet 永远不会返回

HttpURLConnection 超时设置

Cassandra SELECT DISTINCT和超时问题

ssh - 控制套接字不存在 - 操作超时

wininet 或 winhttp,这是 POST 请求的首选