summaryrefslogtreecommitdiffstats
path: root/source/OSSupport/ListenThread.h
diff options
context:
space:
mode:
authormadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2013-03-05 21:47:29 +0100
committermadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2013-03-05 21:47:29 +0100
commitbc8ad9d1b1ce4a1561e2759c15bd1cf2d4322dc1 (patch)
tree727781ce3d7ff828efdee614c1ded5175941ce0f /source/OSSupport/ListenThread.h
parentIPv6: Windows XP doesn't have the inet_pton() function, resorting to custom-formatting the address (diff)
downloadcuberite-bc8ad9d1b1ce4a1561e2759c15bd1cf2d4322dc1.tar
cuberite-bc8ad9d1b1ce4a1561e2759c15bd1cf2d4322dc1.tar.gz
cuberite-bc8ad9d1b1ce4a1561e2759c15bd1cf2d4322dc1.tar.bz2
cuberite-bc8ad9d1b1ce4a1561e2759c15bd1cf2d4322dc1.tar.lz
cuberite-bc8ad9d1b1ce4a1561e2759c15bd1cf2d4322dc1.tar.xz
cuberite-bc8ad9d1b1ce4a1561e2759c15bd1cf2d4322dc1.tar.zst
cuberite-bc8ad9d1b1ce4a1561e2759c15bd1cf2d4322dc1.zip
Diffstat (limited to 'source/OSSupport/ListenThread.h')
-rw-r--r--source/OSSupport/ListenThread.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/source/OSSupport/ListenThread.h b/source/OSSupport/ListenThread.h
new file mode 100644
index 000000000..952cc8a3f
--- /dev/null
+++ b/source/OSSupport/ListenThread.h
@@ -0,0 +1,78 @@
+
+// ListenThread.h
+
+// Declares the cListenThread class representing the thread that listens for client connections
+
+
+
+
+
+#pragma once
+
+#include "IsThread.h"
+#include "Socket.h"
+
+
+
+
+
+// fwd:
+class cServer;
+
+
+
+
+
+class cListenThread :
+ public cIsThread
+{
+ typedef cIsThread super;
+
+public:
+ /// Used as the callback for connection events
+ class cCallback
+ {
+ public:
+ /// This callback is called whenever a socket connection is accepted
+ virtual void OnConnectionAccepted(cSocket & a_Socket) = 0;
+ } ;
+
+ cListenThread(cCallback & a_Callback, cSocket::eFamily a_Family);
+ ~cListenThread();
+
+ /// Creates all the sockets, returns trus if successful, false if not.
+ bool Initialize(const AString & a_PortsString);
+
+ bool Start(void);
+
+ void Stop(void);
+
+ /// Call before Initialize() to set the "reuse" flag on the sockets
+ void SetReuseAddr(bool a_Reuse = true);
+
+protected:
+ typedef std::vector<cSocket> cSockets;
+
+ /// The callback which to notify of incoming connections
+ cCallback & m_Callback;
+
+ /// Socket address family to use
+ cSocket::eFamily m_Family;
+
+ /// Sockets that are being monitored
+ cSockets m_Sockets;
+
+ bool m_ShouldReuseAddr;
+
+ /** Fills in m_Sockets with individual sockets, each for one port specified in a_PortsString.
+ Returns true if successful and at least one socket has been created
+ */
+ bool CreateSockets(const AString & a_PortsString);
+
+ // cIsThread override:
+ virtual void Execute(void) override;
+} ;
+
+
+
+