Вечер добрый! имеется WinInet сессия: Код (Text): InternetOpen InternetConnect HttpOpenRequest HttpAddRequestHeaders HttpSendRequest и вот после этого, нужно получить сокет, используемый данной сессией. как это можно выполнить?
стандартными средствами скорее всего никак, если нестандартными - ковырять/патчить код HttpSendRequest
Cr4sh да блин wininet даже сокеты не импортирует... там черт ногу сломит. а если отвлечься от сокетов - есть ли способ проверить наличие коннекта с сервером в этой сессии?
а что, так уже не катит? Код (Text): HINTERNET hConnect = InternetConnect(hSession, "ya.ru", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, NULL, NULL); if (hConnect == NULL) dosmth(); Cr4sh При чём здесь HttpSendRequest? Сокет раньше создаётся. К тому же, необязательно ковырять код этих функций, можно перехватывать сокет.
riban InternetConnect уже произведен. нужно узнать, не потерян ли он спустя некоторое время после HttpSendRequest. поясни
Немного неверно выразился. Имел ввиду послушать сокет. Юзать libpcap/winpcap - но это тоже изврат. Вот тебе варианты, как проверить соединение: 1. Послать HEAD запрос - если не вернулся (Проверить с помощью GetLastError) - коннект пропал (хотя он должен закрываться с помощью InternetCloseHandle) 2. Юзать InternetCheckConnection 3. Собственно, вариант получения сокета: Код (Text): BOOL InternetQueryOption( HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, LPDWORD lpdwBufferLength ); в качестве dwOption подставишь INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO и получишь следующую структуру: Код (Text): typedef struct { DWORD_PTR Socket; DWORD SourcePort; DWORD DestPort; DWORD Flags; } INTERNET_DIAGNOSTIC_SOCKET_INFO, * LPINTERNET_DIAGNOSTIC_SOCKET_INFO; дескриптор сокета, завязанного на коннекте, понятно где.
riban пункт 2 - разве эта функция не проверяет лишь наличие связи с интернетом? пункт 3 - Благодарю! это именно то, что я хотел видеть!