[C++] FTP Timeout 설정 법 예제 (InternetSetOption)

FTP 연결, Data 보낼 때, Data 수취 할 때 등 TimeOut 설정이 가능함.

TimeOut이 가끔 안되는 버그가 있다고 함.

그럴 때는 Thread 에서 감시하는 함수를 만들어서 감시 해주면 됨.

1. 함수 원형

BOOL InternetSetOption(

IN HINTERNET hInternet OPTIONAL,     //Ftp Internet 핸들(Internet 핸들 임)

IN DWORD Option,    //Time Out Define 적어주면 됨.(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); }





댓글

이 블로그의 인기 게시물

[Python] 파이썬 if문 사용법과 예제

[네트워크] 오류 제어 방식 이란?(FEC, BEC, ARQ)

[Virtual Box] 가상머신 에러 E_FAIL (0x80004005), (VERR_SUPLIB_PATH_NOT_CLEAN) 해결 방법