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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> boost.asio и socket.close 
:(
    Опции темы
Alexandr87
Дата 4.9.2008, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

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



Есть класс типа этого

Код

using boost::asio::ip::tcp;

class Requester {
private:
    char *szPort;
    char *szHostname;
    tcp::socket *s;

public:

    Requester() {
      szPort = "9090";
      szHostname = "localhost";

      boost::asio::io_service io_service;

      tcp::resolver resolver(io_service);
      tcp::resolver::query query(tcp::v4(), szHostname, szPort);
      tcp::resolver::iterator iterator = resolver.resolve(query);

      s = new tcp::socket(io_service);
      s->connect(*iterator);
    }

    ~Requester() {
        try {
           // s->close();
        } catch (std::exception& e) {
            std::cerr << "Exception: " << e.what() << "\n";
        }
    }

    bool proccessRequest(char *req);

};



Суть проста: нужно одному и тому же серверу посылать большое множество сообщение и ответов от них. Для экономии времени на установления соединения, создается объект, который при инициализации подключается к северу, потом во время выполенения программы вызывается его метод, который занимается посылкой/приемом данных от сервера. В заверешении (в деструкторе) данного класса необходимо освободить ресурсы, связанные с соединением.

Как это сделать правильно, delete s, и s->close()  приводят к возникновению системной ошибки. Хотя сообщения в процессе работы исправно посылаются, и также исправно получаются ответы от сервера? 
PM Jabber   Вверх
vinick
Дата 11.9.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 9.6.2005

Репутация: 6
Всего: 22



Цитата(Alexandr87 @  4.9.2008,  17:35 Найти цитируемый пост)
Как это сделать правильно, delete s, и s->close()  приводят к возникновению системной ошибки. Хотя сообщения в процессе работы исправно посылаются, и также исправно получаются ответы от сервера?  


Надеюсь, что делается все-таки сначала s->close() а потом уже delete s  smile 

Какая ошибка возникает? Применяя методы телепатического анализа можно предположить, что происходит попытка прочитать или записать данные уже в закрытый сокет. Это вполне реально при использовании асинхронных методов и работе в нескольких потоках.
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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