📄 ipsock.h
字号:
* * Revision 1.14 1995/10/14 14:57:26 robertj * Added internet address to string conversion functionality. * * Revision 1.13 1995/07/02 01:18:19 robertj * Added static functions to get the current host name/address. * * Revision 1.12 1995/06/17 00:41:40 robertj * More logical design of port numbers and service names. * * Revision 1.11 1995/03/18 06:26:44 robertj * Changed IP address variable for GNU compatibility. * * Revision 1.10 1995/03/14 12:41:38 robertj * Updated documentation to use HTML codes. * * Revision 1.9 1995/03/12 04:38:41 robertj * Added more functionality. * * Revision 1.8 1995/01/02 12:28:24 robertj * Documentation. * Added more socket functions. * * Revision 1.7 1995/01/01 01:07:33 robertj * More implementation. * * Revision 1.6 1994/12/15 12:47:14 robertj * Documentation. * * Revision 1.5 1994/08/23 11:32:52 robertj * Oops * * Revision 1.4 1994/08/22 00:46:48 robertj * Added pragma fro GNU C++ compiler. * * Revision 1.3 1994/08/21 23:43:02 robertj * Spelt Berkeley correctly. * * Revision 1.2 1994/07/25 03:36:03 robertj * Added sockets to common, normalising to same comment standard. * */#ifndef _PIPSOCKET#define _PIPSOCKET#ifdef P_USE_PRAGMA#pragma interface#endif#include <ptlib/socket.h>#ifdef P_HAS_QOS#ifdef _WIN32#ifdef P_KNOCKOUT_WINSOCK2 #include "IPExport.h"#endif // KNOCKOUT_WINSOCK2#endif // _WIN32#endif // P_HAS_QOS/** This class describes a type of socket that will communicate using the Internet Protocol. If P_HAS_IPV6 is not set, IPv4 only is supported. If P_HAS_IPV6 is set, both IPv4 and IPv6 adresses are supported, with IPv4 as default. This allows to transparently use IPv4, IPv6 or Dual stack operating systems. */class PIPSocket : public PSocket{ PCLASSINFO(PIPSocket, PSocket); protected: /* Create a new Internet Protocol socket based on the port number specified. */ PIPSocket(); public: /** A class describing an IP address */ class Address : public PObject { public: /**@name Address constructors */ //@{ /// Create an IPv4 address with the default address: 127.0.0.1 (loopback) Address(); /** Create an IP address from string notation. eg dot notation x.x.x.x. for IPv4, or colon notation x:x:x::xxx for IPv6 */ Address(const PString & dotNotation); /// Create an IPv4 or IPv6 address from 4 or 16 byte values Address(PINDEX len, const BYTE * bytes); /// Create an IP address from four byte values Address(BYTE b1, BYTE b2, BYTE b3, BYTE b4); /// Create an IPv4 address from a four byte value in network byte order Address(DWORD dw); /// Create an IPv4 address from an in_addr structure Address(const in_addr & addr);#if P_HAS_IPV6 /// Create an IPv6 address from an in_addr structure Address(const in6_addr & addr); /// Create an IP (v4 or v6) address from a sockaddr (sockaddr_in, /// sockaddr_in6 or sockaddr_in6_old) structure Address(const int ai_family, const int ai_addrlen,struct sockaddr *ai_addr);#endif#ifdef __NUCLEUS_NET__ Address(const struct id_struct & addr); Address & operator=(const struct id_struct & addr);#endif /// Copy an address from another IP v4 address Address & operator=(const in_addr & addr);#if P_HAS_IPV6 /// Copy an address from another IPv6 address Address & operator=(const in6_addr & addr);#endif /// Copy an address from a string Address & operator=(const PString & dotNotation); /// Copy an address from a four byte value in network order Address & operator=(DWORD dw); //@} /// Compare two adresses for absolute (in)equality Comparison Compare(const PObject & obj) const; bool operator==(const Address & addr) const { return Compare(addr) == EqualTo; } bool operator!=(const Address & addr) const { return Compare(addr) != EqualTo; }#if P_HAS_IPV6 bool operator==(in6_addr & addr) const; bool operator!=(in6_addr & addr) const { return !operator==(addr); }#endif bool operator==(in_addr & addr) const; bool operator!=(in_addr & addr) const { return !operator==(addr); } bool operator==(DWORD dw) const; bool operator!=(DWORD dw) const { return !operator==(dw); }#ifdef P_VXWORKS bool operator==(long unsigned int u) const { return operator==((DWORD)u); } bool operator!=(long unsigned int u) const { return !operator==((DWORD)u); }#endif#ifdef _WIN32 bool operator==(unsigned u) const { return operator==((DWORD)u); } bool operator!=(unsigned u) const { return !operator==((DWORD)u); }#endif#ifdef P_RTEMS bool operator==(u_long u) const { return operator==((DWORD)u); } bool operator!=(u_long u) const { return !operator==((DWORD)u); }#endif#ifdef __BEOS__ bool operator==(in_addr_t a) const { return operator==((DWORD)a); } bool operator!=(in_addr_t a) const { return !operator==((DWORD)a); }#endif bool operator==(int i) const { return operator==((DWORD)i); } bool operator!=(int i) const { return !operator==((DWORD)i); } /// Compare two addresses for equivalence. This will return TRUE /// if the two addresses are equivalent even if they are IPV6 and IPV4#if P_HAS_IPV6 bool operator*=(const Address & addr) const;#else bool operator*=(const Address & addr) const { return operator==(addr); }#endif /// Format an address as a string PString AsString() const; /// Convert string to IP address. Returns TRUE if was a valid address. BOOL FromString( const PString & str ); /// Format an address as a string operator PString() const; /// Return IPv4 address in network order operator in_addr() const;#if P_HAS_IPV6 /// Return IPv4 address in network order operator in6_addr() const;#endif /// Return IPv4 address in network order operator DWORD() const; /// Return first byte of IPv4 address BYTE Byte1() const; /// Return second byte of IPv4 address BYTE Byte2() const; /// Return third byte of IPv4 address BYTE Byte3() const; /// Return fourth byte of IPv4 address BYTE Byte4() const; /// return specified byte of IPv4 or IPv6 address BYTE operator[](PINDEX idx) const; /// Get the address length (will be either 4 or 16) PINDEX GetSize() const; /// Get the pointer to IP address data const char * GetPointer() const { return (const char *)&v; } /// Get the version of the IP address being used unsigned GetVersion() const { return version; } /// Check address 0.0.0.0 or :: BOOL IsValid() const; BOOL IsAny() const; /// Check address 127.0.0.1 or ::1 BOOL IsLoopback() const; /// Check for Broadcast address 255.255.255.255 BOOL IsBroadcast() const; // Check if the remote address is a private address. // For IPV4 this is specified RFC 1918 as the following ranges: // 10.0.0.0 - 10.255.255.255.255 // 172.16.0.0 - 172.31.255.255 // 192.168.0.0 - 192.168.255.255 // For IPV6 this is specified as any address having "1111 1110 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -