123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #ifndef __SOCKADDRIN_20160303__
- #define __SOCKADDRIN_20160303__
- #pragma once
- #ifdef WIN32
- #include <winsock2.h>
- #include <ws2tcpip.h>
- #elif BSD_SOCKET
- #include "platform.h"
- #endif
- struct SockAddrIn : public sockaddr_storage
- {
- public:
- SockAddrIn();
- ~SockAddrIn();
-
- SockAddrIn(IN const SockAddrIn& sin);
-
- SockAddrIn& Copy(IN const SockAddrIn& sin);
-
- void Clear();
-
- bool IsEqual(IN const SockAddrIn& sin) const;
-
- bool IsNull() const { return IsEqual(NULLAddr); }
-
- short GetFamily() const { return ss_family; }
-
- ULONG GetIPAddr() const { return ((SOCKADDR_IN*)this)->sin_addr.s_addr; }
-
- short GetPort() const { return ((SOCKADDR_IN*)this)->sin_port; }
-
- bool CreateFrom(IN LPCTSTR pszAddr, IN LPCTSTR pszService, IN int nFamily = AF_INET);
-
- bool CreateFrom(IN ULONG lIPAddr, IN USHORT nPort, IN int nFamily = AF_INET, IN bool bFmtHost = true);
-
- SockAddrIn& operator=(const SockAddrIn& sin) { return Copy( sin ); }
-
- bool operator==(const SockAddrIn& sin) const { return IsEqual( sin ); }
-
- bool operator!=(const SockAddrIn& sin) const { return !IsEqual( sin ); }
-
- operator LPSOCKADDR() { return reinterpret_cast<LPSOCKADDR>(this); }
-
- operator const IN6_ADDR*() const { return reinterpret_cast<const IN6_ADDR*>(this); }
-
- operator PIN6_ADDR() { return reinterpret_cast<PIN6_ADDR>(this); }
-
- size_t Size() const { return (ss_family == AF_INET) ? sizeof(sockaddr_in) : sizeof(sockaddr_storage); }
-
- void SetAddr(IN const sockaddr_in* psin) { SetAddr(reinterpret_cast<const sockaddr_storage*>(psin)); }
-
- void SetAddr(IN const sockaddr_in6* psin) { SetAddr(reinterpret_cast<const sockaddr_storage*>(psin)); }
-
- void SetAddr(IN const sockaddr_storage* pss) { ss_family = pss->ss_family; memcpy(this, pss, Size()); }
-
- static SockAddrIn NULLAddr;
- };
- #endif
|