00001 00002 #ifndef header_socket_select 00003 #define header_socket_select 00004 00005 #include <list> 00006 #include "API/Core/System/thread.h" 00007 00008 #ifdef WIN32 00009 #include <winsock2.h> 00010 #endif 00011 00012 class CL_Thread; 00013 class CL_Mutex; 00014 class CL_EventTrigger_Socket; 00015 00016 class CL_SocketSelect : CL_Runnable 00017 { 00018 // Construction: 00019 public: 00020 CL_SocketSelect(); 00021 // Creates the socket select listener thread. 00022 00023 ~CL_SocketSelect(); 00024 // Shut down socket select listener thread. 00025 00026 // Attributes: 00027 public: 00028 00029 // Operations: 00030 public: 00031 void listen_read(CL_EventTrigger_Socket *socket); 00032 // Start a read listen for the socket. 00033 00034 void listen_write(CL_EventTrigger_Socket *socket); 00035 // Start a write listen for the socket. 00036 00037 void listen_exception(CL_EventTrigger_Socket *socket); 00038 // Start a exception listen for the socket. 00039 00040 void remove_read(CL_EventTrigger_Socket *socket); 00041 // Remove socket from the read listening. 00042 00043 void remove_write(CL_EventTrigger_Socket *socket); 00044 // Remove socket from the write listening. 00045 00046 void remove_exception(CL_EventTrigger_Socket *socket); 00047 // Remove socket from the exception listening. 00048 00049 // Implementation: 00050 private: 00051 void signal_listen_thread(); 00052 // Make the socket select thread break its listen and check for updates. 00053 // This is used to make it start listening on new sockets, and stop listening 00054 // on old sockets. 00055 00056 virtual void run(); 00057 // Socket select thread function. 00058 00059 CL_Thread *listen_thread; 00060 CL_Mutex *mutex; 00061 volatile bool stop_thread; 00062 00063 std::list<CL_EventTrigger_Socket*> read_sockets; 00064 std::list<CL_EventTrigger_Socket*> write_sockets; 00065 std::list<CL_EventTrigger_Socket*> exception_sockets; 00066 00067 #ifdef WIN32 00068 WSAEVENT signal_event; 00069 #else 00070 00071 #endif 00072 }; 00073 00074 #endif
1.2.6 written by Dimitri van Heesch,
© 1997-2001