Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

wait.h

00001 #ifndef CRYPTOPP_WAIT_H
00002 #define CRYPTOPP_WAIT_H
00003 
00004 #include "cryptopp_config.h"
00005 
00006 #ifdef SOCKETS_AVAILABLE
00007 
00008 #include "cryptlib.h"
00009 #include <vector>
00010 
00011 #ifdef USE_WINDOWS_STYLE_SOCKETS
00012 #include <windows.h>
00013 #else
00014 #include <sys/types.h>
00015 #endif
00016 
00017 NAMESPACE_BEGIN(CryptoPP)
00018 
00019 struct WaitingThreadData;
00020 
00021 //! container of wait objects
00022 class WaitObjectContainer
00023 {
00024 public:
00025         //! exception thrown by WaitObjectContainer
00026         class Err : public Exception
00027         {
00028         public:
00029                 Err(const std::string& s) : Exception(IO_ERROR, s) {}
00030         };
00031 
00032         WaitObjectContainer();
00033 
00034         void Clear();
00035         void SetNoWait() {m_noWait = true;}
00036         bool Wait(unsigned long milliseconds);
00037 
00038 #ifdef USE_WINDOWS_STYLE_SOCKETS
00039         ~WaitObjectContainer();
00040         void AddHandle(HANDLE handle);
00041 #else
00042         void AddReadFd(int fd);
00043         void AddWriteFd(int fd);
00044 #endif
00045 
00046 private:
00047 #ifdef USE_WINDOWS_STYLE_SOCKETS
00048         void CreateThreads(unsigned int count);
00049         std::vector<HANDLE> m_handles;
00050         std::vector<WaitingThreadData *> m_threads;
00051         HANDLE m_startWaiting;
00052         HANDLE m_stopWaiting;
00053 #else
00054         fd_set m_readfds, m_writefds;
00055         int m_maxFd;
00056 #endif
00057         bool m_noWait;
00058 };
00059 
00060 NAMESPACE_END
00061 
00062 #endif
00063 
00064 #endif

Generated on Sun Mar 14 20:44:29 2004 for Crypto++ by doxygen 1.3.6-20040222