今天想用WinINet捏一个多线程下载。遇到两个问题:
1.怎么会出现“无法连接到吊销服务器,或未获得最终响应”的问题?
2.为什么只有两个线程能拿到数据,其他都超时了?
第一个问题很好解决,改注册表,别让他检查吊销服务器了:
void disable_certificate_revocation_check_via_registry(std::string&& strval="Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings")
{
HKEY hkey;
LONG errcode;
if(errcode=RegOpenKeyExA(HKEY_CURRENT_USER,strval.c_str(),0ul,KEY_ALL_ACCESS,&hkey))
throw "RegOpenKeyExA Failed.";
if(errcode=RegSetValueExA(hkey,"CertificateRevocation",0ul,REG_DWORD,(LPBYTE)&dwval,sizeof(DWORD)))
throw "RegSetValueExA Failed.";
RegCloseKey(hkey);
}
【温馨提示:头文件<windows.h>(准确来说<winreg.h>),链接库advapi32.lib】
那第二个呢?玄机在这里:
对症下药:
void enable_concurrency()
{
DWORD dwmaxconn=0xffffffff;
if(!InternetSetOptionA(nullptr,INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER,&dwmaxconn,sizeof(DWORD)))
throw "InternetSetOptionA Failed.";
}
然后就完美了!