1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
#ifndef CADDRINFO_H_
#define CADDRINFO_H_
#include "meta.h"
#include "rfc2553emu.h"
#include "lockable.h"
#ifndef HAVE_GETADDRINFO
#warning Not sure about gai_strerror, and this define check is stupid/incorrect too
#warning but most likely it is missing too -> fake it
#ifndef gai_strerror
#define gai_strerror(x) "Generic DNS error"
#endif
#endif
class CAddrInfo;
class CAddrInfo : public lockable
{
public:
time_t m_nExpTime;
struct addrinfo * m_addrInfo;
CAddrInfo();
bool Resolve(const mstring & sHostname, const mstring &sPort, mstring & sErrorBuf);
~CAddrInfo();
typedef SHARED_PTR<CAddrInfo> SPtr;
static SPtr CachedResolve(const mstring & sHostname, const mstring &sPort,
mstring &sErrorMsgBuf);
static time_t BackgroundCleanup();
protected:
struct addrinfo * m_resolvedInfo; // getaddrinfo excrements, to cleanup
private:
// not to be copied ever
CAddrInfo(const CAddrInfo&);
CAddrInfo operator=(const CAddrInfo&);
};
#endif /*CADDRINFO_H_*/
|