@@ -407,7 +407,7 @@ namespace HttpServer
407407 /* *
408408 * Метод для обработки запроса (запускается в отдельном потоке)
409409 */
410- int Server::threadRequestProc (Socket & clientSocket)
410+ int Server::threadRequestProc (Socket clientSocket)
411411 {
412412 int app_exit_code;
413413
@@ -817,7 +817,7 @@ namespace HttpServer
817817 return app_exit_code;
818818 }
819819
820- int Server::cycleQueue (std::queue<std::shared_ptr< Socket> > &sockets)
820+ int Server::cycleQueue (std::queue<Socket> &sockets)
821821 {
822822 auto it_option = settings.find (" threads_max_count" );
823823
@@ -833,13 +833,10 @@ namespace HttpServer
833833 threads_max_count = System::getProcessorsCount ();
834834 }
835835
836- std::function<int (Server &, Socket & )> serverThreadRequestProc = std::mem_fn (&Server::threadRequestProc);
836+ std::function<int (Server &, Socket)> serverThreadRequestProc = std::mem_fn (&Server::threadRequestProc);
837837
838838 std::vector<std::thread> active_threads;
839- std::vector<std::shared_ptr<Socket> > active_sockets;
840-
841839 active_threads.reserve (threads_max_count);
842- active_sockets.reserve (threads_max_count);
843840
844841 while (process_flag)
845842 {
@@ -867,7 +864,6 @@ namespace HttpServer
867864 {
868865 th->join ();
869866 active_threads.erase (th);
870- active_sockets.erase (active_sockets.begin () + i);
871867 }
872868 else
873869 {
@@ -877,11 +873,8 @@ namespace HttpServer
877873
878874 while (active_threads.size () <= threads_max_count && sockets.empty () == false )
879875 {
880- std::shared_ptr<Socket> client_socket = sockets.front ();
876+ active_threads. emplace_back (serverThreadRequestProc, std::ref (* this ), std::move ( sockets.front () ) );
881877 sockets.pop ();
882-
883- active_threads.emplace_back (serverThreadRequestProc, std::ref (*this ), std::ref (*client_socket) );
884- active_sockets.emplace_back (client_socket);
885878 }
886879
887880 if (false == eventNotFullQueue->notifed () )
@@ -903,17 +896,6 @@ namespace HttpServer
903896 active_threads.clear ();
904897 }
905898
906- if (false == active_sockets.empty () )
907- {
908- for (std::shared_ptr<Socket> &sock : active_sockets)
909- {
910- sock->shutdown ();
911- sock->close ();
912- }
913-
914- active_sockets.clear ();
915- }
916-
917899 return 0 ;
918900 }
919901
@@ -1385,11 +1367,11 @@ namespace HttpServer
13851367 eventNotFullQueue = new Event (true , true );
13861368 eventProcessQueue = new Event ();
13871369
1388- std::queue<std::shared_ptr< Socket> > sockets;
1370+ std::queue<Socket> sockets;
13891371
13901372 process_flag = true ;
13911373
1392- std::function<int (Server &, std::queue<std::shared_ptr< Socket> > &)> serverCycleQueue = std::mem_fn (&Server::cycleQueue);
1374+ std::function<int (Server &, std::queue<Socket> &)> serverCycleQueue = std::mem_fn (&Server::cycleQueue);
13931375 std::thread threadQueue (serverCycleQueue, std::ref (*this ), std::ref (sockets) );
13941376
13951377 Socket client_socket;
@@ -1403,7 +1385,7 @@ namespace HttpServer
14031385 if (client_socket.is_open () )
14041386 {
14051387 client_socket.nonblock (true );
1406- sockets.emplace (new Socket (client_socket) );
1388+ sockets.emplace (std::move (client_socket) );
14071389
14081390 if (sockets.size () <= queue_max_length)
14091391 {
0 commit comments