반응형
InternetSetOption 함수를 사용하면 FTP 연결, Data 송신, Data 수신 할 때 등 TimeOut 설정이 가능함.
TimeOut이 가끔 안되는 버그가 있다고 함.
그럴 때는 Thread 하나 만들어서 InternetSetOption 함수 감시해주면 됨.
나는 문제없이 사용함.
1. 함수 원형
BOOL InternetSetOption(
IN HINTERNET hInternet OPTIONAL, //Ftp Internet 핸들(Internet 핸들)
IN DWORD Option, //Time Out Define 를 default로 작성(Time Out 종류)
IN LPVOID Buf, //Time Out Buffer
IN DWORD BufSize); //Time Out Buffer Size
}
2. InternetSetOption 함수 인자 값.
DWORD ms = 1000;
InternetSetOption(hInternet, INTERNET_OPTION_CONNECT_TIMEOUT, &ms, sizeof(ms));
InternetSetOption 함수가 타임아웃뿐만 아니라 다른 기능도 제공한다. 찾아 보시길.
(지원 안되는 기능과 버그가 있긴 함.)
3. 예제
void TestInternetOption()
{
HINTERNET hInternet;
HINTERNET hFile;
char Buf[1000];
DWORD ReadSize;
BOOL bResult;
DWORD ms;
hInternet = InternetOpen(
"WININET Sample Program",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0);
if(hInternet == NULL) printf("InternetOpen err(%d)\n", GetLastError());
else printf("InternetOpen succeed.\n");
ms = 1000;
InternetSetOption(hInternet, INTERNET_OPTION_CONNECT_TIMEOUT, &ms, sizeof(ms));
InternetSetOption(hInternet, INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT, &ms, sizeof(ms));
InternetSetOption(hInternet, INTERNET_OPTION_CONTROL_SEND_TIMEOUT, &ms, sizeof(ms));
InternetSetOption(hInternet, INTERNET_OPTION_DATA_SEND_TIMEOUT, &ms, sizeof(ms));
InternetSetOption(hInternet, INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, &ms, sizeof(ms));
if(!bResult) printf("InternetSetOption err(%d)\n", GetLastError());
else printf("InternetSetOption succeed.\n");
hFile = InternetOpenUrl(
hInternet,
"http://www.geocities.co.jp/SiliconValley-PaloAlto/5920/other.html",
NULL,
0,
INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_RELOAD,
0);
if(hFile == NULL) printf("InternetOpenUrl err(%d).\n", GetLastError());
else printf("InternetOpenUrl succeed.\n");
for(;;) {
ReadSize = 1000;
bResult = InternetReadFile(
hFile,
Buf,
1000,
&ReadSize);
if(!bResult) {
printf("err(%d)\n", GetLastError());
break;
}
if(bResult && (ReadSize == 0)) break;
Buf[ReadSize] = '\0';
printf("%s", Buf);
}
InternetCloseHandle(hFile);
InternetCloseHandle(hInternet);
}
반응형
'C++' 카테고리의 다른 글
[C++ ] 2차원 포인터 정리 (0) | 2024.01.25 |
---|---|
[C++ ] 1차원 포인터 정리 (0) | 2024.01.25 |
[C++] Vector(벡터) 사용법 (0) | 2024.01.18 |
[C++] FTP 파일 찾기 예제 (FtpFindFirstFile) (0) | 2024.01.18 |
[C++] FTP 예제(SImple Ftp Class) (0) | 2024.01.18 |