Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Когда идет закрытие соеденения фактически? или InternetCloseHandle работает тутже? 
:(
    Опции темы
jonie
Дата 2.7.2006, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



недавно заметил вот такое дело, что при коннекте юзая WinInetAPI даже после использования InternetCloseHandle система фактически не закрывает соеденение, а закрывает его по истечении 1 минуты ровно (у меня).... 
Смотрел через файр (OutpostFirewall)...соеденение висит.. не смертельно, но интересно...
вопросТорможу я? Кого винить (коли не себя)? И что сделать чтобы закрывало сразу?
код тестовый приложен ниже.
Код

#include "stdafx.h"

#pragma comment(lib, "wininet.lib")

#define __HTTP_VERB_GET    "GET"
#define __HTTP_ACCEPT_TYPE "*/*"
#define __HTTP_ACCEPT "Accept: */*\r\n"

#define _DEFAULT_AGENT_ "Mozilla/4.0 (compatible; )"

int _tmain(int argc, _TCHAR* argv[])
{
    const char* szAgent=_DEFAULT_AGENT_;
    HINTERNET _hOpen=::InternetOpen(    szAgent,
                                        INTERNET_OPEN_TYPE_PRECONFIG,
                                        NULL,
                                        NULL,
                                        0);
    if(!_hOpen)OutputDebugString("_hOpen is NULL");

    DWORD port = 443; //https port by default (!)
    const char sza[]="www.blablabla.ru";
    const char szUser[]="";
    const char szPassword[]="";
    HINTERNET _hConnection = ::InternetConnect(    _hOpen,
                                                sza,    //address
                                                port,
                                                szUser,
                                                szPassword,
                                                INTERNET_SERVICE_HTTP,
                                                0,
                                                NULL);
    if(!_hConnection || _hConnection==INVALID_HANDLE_VALUE ||::InternetAttemptConnect(NULL)!=ERROR_SUCCESS)OutputDebugString("_hConnection is NULL or some else_)");
    const char szuri[]="/webstat/do";
    const char *szAcceptType= __HTTP_ACCEPT_TYPE;

    HINTERNET    _hRequest=::HttpOpenRequest( _hConnection,
                                     __HTTP_VERB_GET, // HTTP Verb (GET or POST)
                                     szuri, // Object Name
                                     HTTP_VERSION, // Version
                                     0, // Reference
                                     (LPCSTR*)&szAcceptType, // Accept Type                                                            
                                        INTERNET_FLAG_PRAGMA_NOCACHE| 
                                        INTERNET_FLAG_RELOAD|
                                        INTERNET_FLAG_NO_CACHE_WRITE |
                                        INTERNET_FLAG_FORMS_SUBMIT |
                                        INTERNET_FLAG_SECURE,
                                     NULL); // context call-back point
        
    if(!_hRequest || _hRequest==INVALID_HANDLE_VALUE)OutputDebugString("_hRequest bad...");
    // REPLACE HEADER
    if(!::HttpAddRequestHeaders( _hRequest,__HTTP_ACCEPT, strlen(__HTTP_ACCEPT),HTTP_ADDREQ_FLAG_REPLACE))OutputDebugString("additional header failed...");

    //INsecure connect!
    DWORD sbufsize=4;
    DWORD sbuf=0;
    InternetQueryOption(_hRequest,INTERNET_OPTION_SECURITY_FLAGS,&sbuf,&sbufsize);
    sbuf|=SECURITY_FLAG_IGNORE_UNKNOWN_CA|SECURITY_FLAG_IGNORE_CERT_CN_INVALID |SECURITY_FLAG_IGNORE_CERT_DATE_INVALID;
    InternetSetOption  (_hRequest,INTERNET_OPTION_SECURITY_FLAGS,&sbuf,sbufsize);

    LPCTSTR szContentType="Content-Type: application/x-www-form-urlencoded\r\n";
    // SEND REQUEST
    if(!::HttpSendRequest( _hRequest,    // handle by returned HttpOpenRequest
                            szContentType, // additional HTTP header
                            strlen(szContentType), // additional HTTP header length
                            (LPVOID)NULL, // additional data in HTTP Post or HTTP Put
                            0) // additional data length
                            && ::GetLastError()!=12168)OutputDebugString("Main requet failed ?...");
    
    if(_hRequest)
        InternetCloseHandle(_hRequest);
    if(_hConnection)
        InternetCloseHandle(_hConnection);
    if(_hOpen)
        InternetCloseHandle(_hOpen);

    system("PAUSE");   //висим тут и смотрим..
    return 0;
}

 


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
kirjanov
Дата 7.7.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2006
Где: Dark wood of erro r

Репутация: нет
Всего: 15



Узел, выполняющий активное закрытие, попадает в состояние TIME_WAIT, которое длиться 2MSL(Maximum Segment Lifetime). Этот самый MSL зависит от реализации 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0410 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.