2011. 6. 28. 15:04

problem of InternetReadFile

WinInet 을 사용하는 program 이 문제가 되는 경우가 발생을 하였다.

원인을 파악해 보니

InternetReadlFile(...)

if( GetLastError() == ERROR_IO_PENDING )
...

대략 이런 구조의 코드 였는데 IO PENDING 발생하고 나서 InternetReadFile 의 인자로 되어 있는 buffer와 변수에 Pending 이 완료가 되어도 값이 설정이 안 되는 문제였다.

구현 자체의 문제(Pending 시 처리)로 판단하고 search 를 하였으나 별다른 단서는 찾지 못하고 async 인 경우 InternetReadFile 대신에 InternetReadFileEx 로 변경을 하라는 글들은 찾을 수 있었다.

InternetReadFileEx 인 경우에는 정상적으로 buffer 와 변수가 setting 되었으나 단 하나의 문제의 InternetReadFileExW 를 사용하는 경우에는 구현이 안 되었다는 오류가 나오므로 InternetReadFileExA 만 사용해야 한다.