00001 #ifndef __SOCKETADDRESS_H 00002 #define __SOCKETADDRESS_H 00003 00004 #ifdef WIN32 00005 #include <winsock2.h> 00006 #else 00007 #include <netinet/in.h> // for sockaddr_in 00008 #endif 00009 00010 #include "IpAddress.h" 00011 00012 class SocketAddress : public BasicObject { 00013 public: 00014 SocketAddress(); 00015 SocketAddress(IpAddress, unsigned short); 00016 SocketAddress(struct sockaddr_in*); 00017 SocketAddress(const SocketAddress&); 00018 virtual ~SocketAddress(); 00019 00020 void setSocketAddress(struct sockaddr_in*); 00021 void setSocketAddress(const IpAddress&, unsigned short); 00022 void setIpAddress(const IpAddress&); 00023 void setPort(unsigned short); 00024 void setPort(const char*); 00025 void setPort(string); 00026 00027 struct sockaddr_in* getSockAddrStruct(); 00028 OS_SPEC_SOCKLEN* getSockAddrStructLen(); 00029 unsigned short getPort(); 00030 IpAddress getIpAddress(); 00031 bool isZero(); 00032 00033 bool read(std::istream&); 00034 bool read(const char*); 00035 bool read(string); 00036 00037 virtual void toStream(std::ostream&); 00038 const char* toCStr(); 00039 00040 private: 00041 static void initSockAddr(struct sockaddr_in* sockAddr, unsigned int ipAddr, int port); 00042 00043 // These variables are all kept synchronized with each other 00044 IpAddress m_ipAddr; 00045 unsigned short m_port; 00046 struct sockaddr_in m_sockAddrStruct; 00047 OS_SPEC_SOCKLEN m_sockAddrStructLen; 00048 00050 char m_cstr[MAX_IP_ADDR_STR + 1 + 5]; 00051 }; 00052 00053 #endif