interim update while working TcpServer
This commit is contained in:
		| @ -56,7 +56,6 @@ public: | |||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
| 	virtual int start (int* err_code = QSE_NULL) QSE_CPP_NOEXCEPT; | 	virtual int start (int* err_code = QSE_NULL) QSE_CPP_NOEXCEPT; | ||||||
| 	virtual int start (bool winsock_inheritable, int* err_code = QSE_NULL) QSE_CPP_NOEXCEPT; |  | ||||||
| 	virtual int stop () QSE_CPP_NOEXCEPT; | 	virtual int stop () QSE_CPP_NOEXCEPT; | ||||||
|  |  | ||||||
| 	bool isServing () const QSE_CPP_NOEXCEPT | 	bool isServing () const QSE_CPP_NOEXCEPT | ||||||
| @ -126,6 +125,11 @@ public: | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| protected: | protected: | ||||||
|  | 	class Listener: public QSE::Socket | ||||||
|  | 	{ | ||||||
|  | 		Listener* next_listener; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
| 	class Client: public QSE::Thread  | 	class Client: public QSE::Thread  | ||||||
| 	{ | 	{ | ||||||
| 	public: | 	public: | ||||||
| @ -142,6 +146,9 @@ protected: | |||||||
| 		SocketAddress address; | 		SocketAddress address; | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|  | 	Listener* listener_head; | ||||||
|  | 	Listener* listener_tail; | ||||||
|  |  | ||||||
| 	SocketAddress binding_address; | 	SocketAddress binding_address; | ||||||
| 	bool          stop_requested; | 	bool          stop_requested; | ||||||
| 	bool          server_serving; | 	bool          server_serving; | ||||||
| @ -158,7 +165,7 @@ protected: | |||||||
| private: | private: | ||||||
| 	void delete_dead_clients () QSE_CPP_NOEXCEPT; | 	void delete_dead_clients () QSE_CPP_NOEXCEPT; | ||||||
| 	void delete_all_clients  () QSE_CPP_NOEXCEPT; | 	void delete_all_clients  () QSE_CPP_NOEXCEPT; | ||||||
| 	int open_tcp_socket (Socket& socket, bool winsock_inheritable, int* err_code) QSE_CPP_NOEXCEPT; | 	int open_tcp_socket (Socket& socket, int* err_code) QSE_CPP_NOEXCEPT; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -213,6 +220,7 @@ public: | |||||||
| 		{ | 		{ | ||||||
| 			// TODO: are there any ways to achieve this without memory allocation? | 			// TODO: are there any ways to achieve this without memory allocation? | ||||||
| 			//this->__lfunc = new TCallable<T> (QSE_CPP_RVREF(f)); | 			//this->__lfunc = new TCallable<T> (QSE_CPP_RVREF(f)); | ||||||
|  | 		// TODO:	this->__lfunc = new TCallable<T> (QSE_CPP_RVREF(f)); | ||||||
| 		} | 		} | ||||||
| 		catch (...) | 		catch (...) | ||||||
| 		{ | 		{ | ||||||
|  | |||||||
| @ -96,27 +96,18 @@ TcpServer::TcpServer (const SocketAddress& address): | |||||||
|  |  | ||||||
| TcpServer::~TcpServer () QSE_CPP_NOEXCEPT | TcpServer::~TcpServer () QSE_CPP_NOEXCEPT | ||||||
| { | { | ||||||
| 	// QSE_ASSERT (server_serving == false); | 	// QSE_ASSERT (this->server_serving == false); | ||||||
| 	this->delete_all_clients (); | 	this->delete_all_clients (); | ||||||
| } | } | ||||||
|  |  | ||||||
| int TcpServer::start (int* err_code) QSE_CPP_NOEXCEPT | int TcpServer::open_tcp_socket (Socket& socket, int* err_code) QSE_CPP_NOEXCEPT | ||||||
| { | { | ||||||
| 	return this->start(true, err_code); | 	if (socket.open(this->binding_address.getFamily(), QSE_SOCK_STREAM, Socket::T_CLOEXEC | Socket::T_NONBLOCK) <= -1) | ||||||
| } |  | ||||||
|  |  | ||||||
| int TcpServer::open_tcp_socket (Socket& socket, bool winsock_inheritable, int* err_code) QSE_CPP_NOEXCEPT |  | ||||||
| { |  | ||||||
| 	if (socket.open(this->binding_address.getFamily(), QSE_SOCK_STREAM, 0) <= -1) |  | ||||||
| 	{ | 	{ | ||||||
| 		if (err_code) *err_code = ERR_OPEN; | 		if (err_code) *err_code = ERR_OPEN; | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| #if defined(_WIN32) |  | ||||||
| 	SetHandleInformation ((HANDLE)socket.handle(), HANDLE_FLAG_INHERIT, (winsock_inheritable? HANDLE_FLAG_INHERIT: 0)); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| 	//socket.setReuseAddr (true); | 	//socket.setReuseAddr (true); | ||||||
| 	//socket.setReusePort (true); | 	//socket.setReusePort (true); | ||||||
|  |  | ||||||
| @ -136,7 +127,7 @@ int TcpServer::open_tcp_socket (Socket& socket, bool winsock_inheritable, int* e | |||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| int TcpServer::start (bool winsock_inheritable, int* err_code) QSE_CPP_NOEXCEPT | int TcpServer::start (int* err_code) QSE_CPP_NOEXCEPT | ||||||
| { | { | ||||||
| 	this->server_serving = true; | 	this->server_serving = true; | ||||||
| 	if (err_code != QSE_NULL) *err_code = ERR_NONE; | 	if (err_code != QSE_NULL) *err_code = ERR_NONE; | ||||||
| @ -149,7 +140,7 @@ int TcpServer::start (bool winsock_inheritable, int* err_code) QSE_CPP_NOEXCEPT | |||||||
| 	{ | 	{ | ||||||
| 		Socket socket; | 		Socket socket; | ||||||
|  |  | ||||||
| 		if (this->open_tcp_socket(socket, winsock_inheritable, err_code) <= -1) | 		if (this->open_tcp_socket(socket, err_code) <= -1) | ||||||
| 		{ | 		{ | ||||||
| 			this->server_serving = false; | 			this->server_serving = false; | ||||||
| 			this->setStopRequested (false); | 			this->setStopRequested (false); | ||||||
| @ -204,7 +195,7 @@ int TcpServer::start (bool winsock_inheritable, int* err_code) QSE_CPP_NOEXCEPT | |||||||
| 					socket.close (); | 					socket.close (); | ||||||
|  |  | ||||||
| 				reopen: | 				reopen: | ||||||
| 					if (this->open_tcp_socket (socket, winsock_inheritable, err_code) <= -1) | 					if (this->open_tcp_socket (socket, err_code) <= -1) | ||||||
| 					{ | 					{ | ||||||
| 						if (reopen_count >= 100)  | 						if (reopen_count >= 100)  | ||||||
| 						{ | 						{ | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user