#include <abstract_tcp_server.h>
template<class THandler>
class epee::net_utils::abstract_tcp_server< THandler >
Definition at line 77 of file abstract_tcp_server.h.
◆ abstract_tcp_server()
template<class THandler >
Definition at line 162 of file abstract_tcp_server.h.
163 m_initialized(
false),
164 m_stop_server(0), m_port(0), m_threads_count(0)
◆ deinit_server()
template<class THandler >
Definition at line 215 of file abstract_tcp_server.h.
223 shutdown(m_listen_socket, SD_BOTH);
224 int res = closesocket(m_listen_socket);
225 if(SOCKET_ERROR ==
res)
227 int err = ::WSAGetLastError();
228 LOG_ERROR(
"Failed to closesocket(), err = " << err <<
" \"" << socket_errors::get_socket_error_text(err) <<
"\"");
233 int res = ::WSACleanup();
234 if(SOCKET_ERROR ==
res)
236 int err = ::WSAGetLastError();
237 LOG_ERROR(
"Failed to WSACleanup(), err = " << err <<
" \"" << socket_errors::get_socket_error_text(err) <<
"\"");
239 m_initialized =
false;
◆ get_config_object()
template<class THandler >
◆ init_server()
template<class THandler >
Definition at line 171 of file abstract_tcp_server.h.
175 int err = ::WSAStartup(MAKEWORD(2,2), &wsad);
176 if ( err != 0 || LOBYTE( wsad.wVersion ) != 2 || HIBYTE( wsad.wVersion ) != 2 )
178 LOG_ERROR(
"Could not find a usable WinSock DLL, err = " << err <<
" \"" << socket_errors::get_socket_error_text(err) <<
"\"");
182 m_initialized =
true;
184 m_listen_socket = ::WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
187 err = ::WSAGetLastError();
188 LOG_ERROR(
"Failed to create socket, err = " << err <<
" \"" << socket_errors::get_socket_error_text(err) <<
"\"");
193 setsockopt (m_listen_socket, SOL_SOCKET,SO_REUSEADDR,
reinterpret_cast<char*
>(&opt),
sizeof(
int));
195 sockaddr_in adr = {0};
196 adr.sin_family = AF_INET;
197 adr.sin_addr.s_addr = htonl(INADDR_ANY);
198 adr.sin_port = (u_short)htons(port_no);
200 err = bind(m_listen_socket, (
const sockaddr*)&adr,
sizeof(adr ));
201 if(SOCKET_ERROR == err )
203 err = ::WSAGetLastError();
204 LOG_PRINT(
"Failed to Bind, err = " << err <<
" \"" << socket_errors::get_socket_error_text(err) <<
"\"", LOG_LEVEL_2);
209 ::InterlockedExchange(&m_stop_server, 0);
◆ run_server()
template<class THandler >
Definition at line 252 of file abstract_tcp_server.h.
254 int err = listen(m_listen_socket, 10000);
255 if(SOCKET_ERROR == err )
257 err = ::WSAGetLastError();
258 LOG_ERROR(
"Failed to listen, err = " << err <<
" \"" << socket_errors::get_socket_error_text(err) <<
"\"");
262 LOG_PRINT(
"Listening port "<< m_port <<
"...." , LOG_LEVEL_2);
264 while(!m_stop_server)
266 sockaddr_in adr_from = {0};
267 int adr_len =
sizeof(adr_from);
268 fd_set read_fs = {0};
269 read_fs.fd_count = 1;
270 read_fs.fd_array[0] = m_listen_socket;
273 int select_res = select(0, &read_fs, NULL, NULL, &tv);
276 SOCKET new_sock = WSAAccept(m_listen_socket, (sockaddr *)&adr_from, &adr_len, NULL, NULL);
277 LOG_PRINT(
"Accepted connection on socket=" << new_sock, LOG_LEVEL_2);
278 invoke_connection(new_sock, adr_from.sin_addr.s_addr, adr_from.sin_port);
283 #define ABSTR_TCP_SRV_WAIT_COUNT_MAX 5000
284 #define ABSTR_TCP_SRV_WAIT_COUNT_INTERVAL 1000
#define ABSTR_TCP_SRV_WAIT_COUNT_INTERVAL
#define ABSTR_TCP_SRV_WAIT_COUNT_MAX
◆ send_stop_signal()
template<class THandler >
The documentation for this class was generated from the following file: