wininet是對socket的封裝
主要流程為創建,連接,發送,接收,關閉幾個過程
所以在回調函數InternetStatusCallback中可以檢測到dwInternetStatus
#define INTERNET_STATUS_HANDLE_CREATED 60
#define INTERNET_STATUS_CONNECTING_TO_SERVER 20
#define INTERNET_STATUS_CONNECTED_TO_SERVER 21
#define INTERNET_STATUS_SENDING_REQUEST 30
#define INTERNET_STATUS_REQUEST_SENT 31
#define INTERNET_STATUS_RECEIVING_RESPONSE 40
#define INTERNET_STATUS_RESPONSE_RECEIVED 41
#define INTERNET_STATUS_REQUEST_COMPLETE 100
#define INTERNET_STATUS_CLOSING_CONNECTION 50
#define INTERNET_STATUS_CONNECTION_CLOSED 51
所以有的時候在設置超時時候不好用 因為只是設置了一個過程的超時整體超時還是不好用
如超時有
#define INTERNET_OPTION_CONNECT_TIMEOUT 2
#define INTERNET_OPTION_CONTROL_SEND_TIMEOUT INTERNET_OPTION_SEND_TIMEOUT
#define INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT INTERNET_OPTION_RECEIVE_TIMEOUT
#define INTERNET_OPTION_DATA_SEND_TIMEOUT 7
#define INTERNET_OPTION_DATA_RECEIVE_TIMEOUT 8
應該設置各個流程的超時如:
InternetSetOption(NULL, INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT, &dwTimeout, sizeof(DWORD));
但是每個流程超時設置后應答時間和預期還是不一樣。可能有幾種原因,
1.各個流程不是按照最長流程超時返回,所以有的流程沒有花費timeout超時已經返回
2.設置超時還不夠完整 還有別的流程需要設置超時
3.設置超時失效http://support.microsoft.com/kb/176420也許是微軟BUG
#define INTERNET_STATUS_CONNECTED_TO_SERVER 21
#define INTERNET_STATUS_REQUEST_SENT 31
#define INTERNET_STATUS_RECEIVING_RESPONSE 40
#define INTERNET_STATUS_RESPONSE_RECEIVED 41
#define INTERNET_STATUS_CONNECTED_TO_SERVER 21
#define INTERNET_STATUS_REQUEST_SENT 31
#define INTERNET_STATUS_RECEIVING_RESPONSE 40
#define INTERNET_STATUS_RESPONSE_RECEIVED 41
#define INTERNET_STATUS_RESPONSE_RECEIVED 41