Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Здравствуйте! Не могу понять. Принимаю сокет в обработчике сессии и просто хочу его выключить.
- Я запускаю функцию tets1() чтобы все запросы прогнал на сервер. Сервер просто виснет. Ни ошибок не печатает просто пишет что слушает порт и никак не реагирует :
- "127.0.0.1" |80|
- Listening...
- SOCKET SHOUTED DOWN
- Listening...
- SOCKET SHOUTED DOWN
- Listening...
- И так раз 5 еще....
- Акцептор:
- acceptor_.open(endpoint_.protocol());
- acceptor_.set_option(net::socket_base::reuse_address(false));//пытался true делать
- acceptor_.bind(endpoint_);
- acceptor_.listen(net::socket_base::max_listen_connections);
- Запускаю другой экземпляр клиента с тем же адресом и портом куда подключиться - сервер просто не реагирует!!!!!
- Как защитить сервер чтобы не вис????
- ***************************ОБРАБОТЧИК СЕССИИ!************************
- Просто выключает сокет!!!!!
- void HandleSession(std::shared_ptr<tcp::socket> socket)
- {
- Service::ShutDownSocket(*socket);
- };
- #include "service.h"
- #include "tokenizer.h"
- #include <boost/asio.hpp>
- #include <iostream>
- namespace net = boost::asio;
- using tcp = net::ip::tcp;
- Функция запуска контекста в многопотоке...........
- void MtreadRunContext(net::io_context &ioc)
- {
- std::vector<jthread> run;
- for (int i = 0; i < std::thread::hardware_concurrency(); ++i)
- {
- run.push_back(jthread([&ioc]
- { ioc.run(); }));
- }
- ioc.run();
- }
- Выключть сокет................
- void ShutDownSocket(tcp::socket &sock)
- {
- boost::system::error_code ec;
- sock.cancel(ec);
- if(ec){
- std::cout << ec.what() << std::endl;
- }
- sock.shutdown(sock.shutdown_both, ec);
- if(ec){
- std::cout << ec.what() << std::endl;
- }
- sock.close();
- if(ec){
- std::cout << ec.what() << std::endl;
- }
- };
- Функция прослушки порта:
- void MainServer::Listen()
- {
- std::cout << "Listening...\n";
- acceptor_.async_accept([&](boost::system::error_code ec, tcp::socket socket)
- {
- if(ec){
- std::cout << ec.value() << " " << ec.message() << '\n' <<
- ec.what() << '\n';
- }
- std::shared_ptr<ServerSession> servsess = std::make_shared<ServerSession>(this);
- servsess->HandleSession(std::make_shared<tcp::socket>(std::move(socket)));
- Listen();
- });
- if (is_first_run_)
- {
- Service::MtreadRunContext(ioc_);
- is_first_run_ = false;
- };
- }
- ---------------------------------------------------------------------------
- void test1()
- {
- try
- {
- net::io_context ioc(16);
- tcp::socket socket{ioc};
- boost::system::error_code ec;
- auto endpoint = tcp::endpoint(net::ip::make_address("127.0.0.1"), 80);
- socket.open(endpoint.protocol(), ec);
- if (ec)
- {
- std::cerr << "Open error: " << ec.message() << std::endl;
- }
- socket.set_option(boost::asio::socket_base::reuse_address(true), ec);
- if (ec)
- {
- std::cerr << "Set option error: " << ec.message() << std::endl;
- }
- socket.connect(endpoint, ec);
- if (ec)
- {
- std::cerr << "COnnect error: " << ec.message() << std::endl;
- }
- task mp;
- std::optional<std::string> reas = std::nullopt;
- std::string str = "";
- Service::TokenGen gen;
- // boost::asio::io_context ioc;
- str = UserInterface::US_ChrMakeSendMessage(gen.GenerateHEXToken(), "22sssssssswdqeefvqwef222222222222222222222222222222");
- net::post(ioc, [&]()
- { net::write(socket, net::buffer(std::move(str))); });
- str = UserInterface::US_ChrMakeObjDisconnect(gen.GenerateHEXToken());
- net::post(ioc, [&]()
- { net::write(socket, net::buffer(std::move(str))); });
- str = UserInterface::US_SrvMakeObjCreateRoom("YANDEX");
- net::post(ioc, [&]()
- { net::write(socket, net::buffer(std::move(str))); });
- str = UserInterface::US_SrvMakeObjCreateUser("RRAT", "hjsjklk;l");
- net::post(ioc, [&]()
- { net::write(socket, net::buffer(std::move(str))); });
- str = UserInterface::US_SrvMakeObjGetUsers("RRAT");
- net::post(ioc, [&]()
- { net::write(socket, net::buffer(std::move(str))); });
- str = UserInterface::US_SrvMakeObjLogin("RRAT", "jijjiw", "kjjolpdpw");
- net::post(ioc, [&]()
- { net::write(socket, net::buffer(std::move(str))); });
- str = UserInterface::US_SrvMakeObjRoomList();
- net::post(ioc, [&]()
- { net::write(socket, net::buffer(std::move(str))); });
- Service::MtreadRunContext(ioc);
- }
- catch (const std::exception &ex)
- {
- std::cout << ex.what();
- system("pause");
- }
- // ioc.run();
- }
- int main()
- {
- for (int i = 0; i < 10; ++i)
- {
- test1();
- }
- /// system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement