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
00022 class
WaitObjectContainer
00023 {
00024
public:
00025
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