Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2015, 06:33   #1
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию Создание тестовой нагрузки на сервер(std::thread, boost::asio)

Здравствуйте. Есть очень простой синхронный сервер, который на каждое подключение создает отдельный поток, в котором работает с этим подключением.
Я хочу протестировать этот сервер. Решил поступить похожей схемой, сделать программу, которая создает N потоков, в каждом создает сокет и подключается к серверу. Примерно так:
Код:
void connection() {
    clog << "Client started\n";
    using boost::asio::ip::tcp;
    int port = 26000;
    endpoint ep( ip::address::from_string("127.0.0.1"), port);
    ip::tcp::socket sock(service); // service - это глобальный boost::asio::io_service;

    sock.open(ip::tcp::v4());
    sock.connect(ep);
    sock.write_some(buffer("Hello, server!");
    char buff[1024];
    // поддерживаем соединение
    while (true) {
        sock.read_some(buffer(buff, 1024));
        cout << "response: \n" << buff << endl;
    }
    clog << "Client closed\n";
    sock.shutdown(ip::tcp::socket::shutdown_receive);
    sock.close();
}

void start_new_connection(std::function<void()> handler) {
    std::thread([handler] {
        try {
            handler();
        }
        catch(std::exception& e) {
            cerr << "Error: " << e.what() << endl;
        }
    }).detach();
}

// ну и тестовый код
int main() {
     for (int i = 0; i < 5; i++) {
         start_new_connection(connection);
     }
}
Должно создаться 5 различных подключений в разных потоках, но при запуске вывод постоянно разный, иногда создается 1 "Client started", иногда 3 или 4, но постоянно программа моментально завершается, т.е. while(true) для поддержки соединения не срабатывает или выполнение до него не доходит. В чем может быть проблема?
halcyon вне форума Ответить с цитированием
Старый 22.04.2015, 06:44   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Фунцкия main завершается, а с ней и программа.
Сделайте так, чтоб функция main не завершалась, например ждите нажатия клавишы.
waleri вне форума Ответить с цитированием
Старый 24.04.2015, 11:23   #3
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию

facepalm.cpp. Что-то поторопился я. Спасибо.
halcyon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
boost/asio MayhemWithMercy C/C++ Сетевое программирование 1 11.06.2014 17:44
boost ASIO сериализация Kukurudza Общие вопросы C/C++ 2 06.12.2011 13:38
boost::thread и CreateThread Sam Gold Общие вопросы C/C++ 3 09.10.2011 18:01
Boost::Asio on Mingw russian-stalker Общие вопросы C/C++ 0 05.01.2011 16:27
Boost (asio + thread) - noncopyable MInner Общие вопросы C/C++ 1 06.12.2009 16:41