Skip to content

Commit 4157541

Browse files
committed
Replaced 'select' on 'epoll/poll/WSAPoll'
1 parent dbcfcee commit 4157541

File tree

9 files changed

+341
-153
lines changed

9 files changed

+341
-153
lines changed

httpserver.userprefs

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,29 @@
11
<Properties>
22
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" />
3-
<MonoDevelop.Ide.Workbench ActiveDocument="httpserver/Server.cpp">
3+
<MonoDevelop.Ide.Workbench ActiveDocument="httpserver/SocketList.cpp">
44
<Files>
5-
<File FileName="httpserver/Server.cpp" Line="1409" Column="30" />
6-
<File FileName="httpserver/Module.cpp" Line="1" Column="1" />
7-
<File FileName="httpserver/SignalsHandles.cpp" Line="101" Column="20" />
5+
<File FileName="httpserver/Server.cpp" Line="1" Column="1" />
6+
<File FileName="httpserver/Module.cpp" Line="3" Column="3" />
7+
<File FileName="httpserver/SignalsHandles.cpp" Line="1" Column="1" />
88
<File FileName="httpserver/Utils.h" Line="1" Column="1" />
99
<File FileName="httpserver/Main.cpp" Line="1" Column="1" />
1010
<File FileName="httpserver/Module.h" Line="1" Column="1" />
11-
<File FileName="httpserver/Server.h" Line="96" Column="26" />
11+
<File FileName="httpserver/Server.h" Line="1" Column="1" />
1212
<File FileName="httpserver/Event.h" Line="1" Column="1" />
1313
<File FileName="httpserver/Event.cpp" Line="1" Column="1" />
14-
<File FileName="httpserver/System.cpp" Line="12" Column="2" />
15-
<File FileName="httpserver/System.h" Line="20" Column="20" />
16-
<File FileName="httpserver/SignalsHandles.h" Line="7" Column="19" />
17-
<File FileName="httpserver/Main.h" Line="7" Column="32" />
14+
<File FileName="httpserver/System.cpp" Line="1" Column="1" />
15+
<File FileName="httpserver/System.h" Line="1" Column="1" />
16+
<File FileName="httpserver/SignalsHandles.h" Line="1" Column="1" />
17+
<File FileName="httpserver/Main.h" Line="1" Column="1" />
18+
<File FileName="httpserver/ServerApplicationSettings.h" Line="1" Column="1" />
19+
<File FileName="httpserver/ServerApplicationDefaultSettings.h" Line="1" Column="1" />
20+
<File FileName="httpserver/SocketList.h" Line="8" Column="8" />
21+
<File FileName="httpserver/SocketList.cpp" Line="30" Column="30" />
22+
<File FileName="httpserver/Socket.h" Line="1" Column="1" />
23+
<File FileName="../../../usr/include/c++/4.8/mutex" Line="1" Column="1" />
24+
<File FileName="httpserver/RawData.h" Line="1" Column="1" />
25+
<File FileName="httpserver/Socket.cpp" Line="29" Column="29" />
26+
<File FileName="../../../usr/include/c++/4.8/bits/hashtable_policy.h" Line="1" Column="1" />
1827
</Files>
1928
</MonoDevelop.Ide.Workbench>
2029
<MonoDevelop.Ide.DebuggingService.Breakpoints>

httpserver/Module.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11

22
#include "Module.h"
33

4+
#include <iostream>
5+
46
namespace HttpServer
57
{
68
Module::Module(): lib_handle(nullptr)
@@ -40,6 +42,9 @@ namespace HttpServer
4042

4143
if (nullptr == lib_handle)
4244
{
45+
#ifdef POSIX
46+
std::cout << dlerror() << std::endl;
47+
#endif
4348
return false;
4449
}
4550

httpserver/Server.cpp

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1661,7 +1661,7 @@ namespace HttpServer
16611661
}
16621662
}
16631663

1664-
void Server::accept(std::vector<Socket> &sockets, const System::native_socket_type max_val) const
1664+
/* void Server::accept(std::vector<Socket> &sockets, const System::native_socket_type max_val) const
16651665
{
16661666
::fd_set readset;
16671667
FD_ZERO(&readset);
@@ -1698,7 +1698,7 @@ namespace HttpServer
16981698
}
16991699
}
17001700
}
1701-
}
1701+
}*/
17021702

17031703
int Server::run()
17041704
{
@@ -1712,11 +1712,11 @@ namespace HttpServer
17121712
// Get full applications settings list
17131713
apps_tree.collectApplicationSettings(applications);
17141714

1715-
System::native_socket_type max_val = 0;
1716-
17171715
// Bind ports set
17181716
std::unordered_set<int> ports;
17191717

1718+
std::vector<Socket> server_sockets;
1719+
17201720
// Open applications sockets
17211721
for (auto &app : applications)
17221722
{
@@ -1733,11 +1733,6 @@ namespace HttpServer
17331733
{
17341734
if (0 == sock.listen() )
17351735
{
1736-
if (max_val < sock.get_handle() )
1737-
{
1738-
max_val = sock.get_handle();
1739-
}
1740-
17411736
sock.nonblock(true);
17421737

17431738
server_sockets.emplace_back(std::move(sock) );
@@ -1767,6 +1762,13 @@ namespace HttpServer
17671762
return 2;
17681763
}
17691764

1765+
sockets_list.create(server_sockets.size() );
1766+
1767+
for (auto &sock : server_sockets)
1768+
{
1769+
sockets_list.addSocket(sock);
1770+
}
1771+
17701772
std::cout << "Log: start server cycle;" << std::endl << std::endl;
17711773

17721774
const size_t queue_max_length = 1024;
@@ -1787,44 +1789,36 @@ namespace HttpServer
17871789
// Cycle receiving new connections
17881790
do
17891791
{
1790-
this->accept(client_sockets, max_val);
1791-
1792-
for (Socket &sock : client_sockets)
1792+
if (sockets_list.accept(client_sockets) )
17931793
{
1794-
if (sock.is_open() )
1794+
for (Socket &sock : client_sockets)
17951795
{
1796-
sock.nonblock(true);
1797-
sockets.emplace(std::move(sock) );
1798-
1799-
if (sockets.size() <= queue_max_length)
1796+
if (sock.is_open() )
18001797
{
1801-
eventNotFullQueue->reset();
1802-
}
1798+
sock.nonblock(true);
1799+
sockets.emplace(std::move(sock) );
1800+
1801+
if (sockets.size() <= queue_max_length)
1802+
{
1803+
eventNotFullQueue->reset();
1804+
}
18031805

1804-
eventProcessQueue->notify();
1806+
eventProcessQueue->notify();
1807+
}
18051808
}
1806-
}
18071809

1808-
client_sockets.clear();
1810+
client_sockets.clear();
18091811

1810-
eventNotFullQueue->wait();
1812+
eventNotFullQueue->wait();
1813+
}
18111814
}
18121815
while (process_flag || eventUpdateModule->notifed() );
18131816

18141817
eventProcessQueue->notify();
18151818

18161819
threadQueue.join();
18171820

1818-
clear();
1819-
1820-
std::cout << "Log: final server cycle;" << std::endl;
1821-
1822-
return EXIT_SUCCESS;
1823-
}
1824-
1825-
void Server::stopProcess()
1826-
{
1827-
process_flag = false;
1821+
sockets_list.destroy();
18281822

18291823
if (server_sockets.size() )
18301824
{
@@ -1836,6 +1830,17 @@ namespace HttpServer
18361830
server_sockets.clear();
18371831
}
18381832

1833+
clear();
1834+
1835+
std::cout << "Log: final server cycle;" << std::endl;
1836+
1837+
return EXIT_SUCCESS;
1838+
}
1839+
1840+
void Server::stopProcess()
1841+
{
1842+
process_flag = false;
1843+
18391844
if (eventNotFullQueue)
18401845
{
18411846
eventNotFullQueue->notify();

httpserver/Server.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include <unordered_map>
1010
#include <csignal>
1111

12-
#include "Socket.h"
12+
#include "SocketList.h"
1313
#include "DataVariantAbstract.h"
1414
#include "ServerApplicationsTree.h"
1515
#include "ServerApplicationDefaultSettings.h"
@@ -30,7 +30,7 @@ namespace HttpServer
3030

3131
ServerApplicationsTree apps_tree;
3232

33-
std::vector<Socket> server_sockets;
33+
SocketList sockets_list;
3434

3535
Event *eventNotFullQueue;
3636
Event *eventProcessQueue;
@@ -49,7 +49,7 @@ namespace HttpServer
4949
int transferFile(const Socket &, const std::chrono::milliseconds &, const std::string &, const std::unordered_map<std::string, std::string> &, const std::map<std::string, std::string> &, const std::string &, const bool) const;
5050
bool parseIncomingVars(std::unordered_multimap<std::string, std::string> &, const std::string &) const;
5151

52-
void accept(std::vector<Socket> &sockets, const System::native_socket_type max_val) const;
52+
// void accept(std::vector<Socket> &sockets, const System::native_socket_type max_val) const;
5353

5454
bool loadConfig();
5555
bool includeConfigFile(const std::string &, std::string &, const size_t);

0 commit comments

Comments
 (0)