CService

A combination of a network address (CNetAddr) and a (TCP) port

Synopsis

Declared in <netaddress.h>

class CService
    : public CNetAddr

Base Classes

NameDescription
CNetAddrNetwork address.

Types

NameDescription
SerParams Serialization parameters selecting the address wire encoding.

Enums

NameDescription
BIP155Network BIP155 network ids recognized by this software.
Encoding Wire encoding used when (un)serializing an address.

Member Functions

NameDescription
CService [constructor]Constructors
GetAddrBytes Get the raw address bytes.
GetIn6Addr Fill an in6_addr with this address's IPv6 value.
GetInAddr Fill an in_addr with this address's IPv4 value.
GetKey Get a unique key identifying this service (address and port).
GetLinkedIPv4 For IPv4, mapped IPv4, SIIT translated IPv4, Teredo, 6to4 tunneled addresses, return the relevant IPv4 address as a uint32.
GetNetClass Get the network class used for grouping this address.
GetNetwork Get the network this address belongs to.
GetPort Get the TCP port in host byte order.
GetReachabilityFrom Calculate how reachable this address is from a given peer address.
GetSAFamily Get the address family
GetSockAddr Fill a sockaddr structure with this service's address and port.
HasCJDNSPrefix Whether the raw address begins with the CJDNS prefix byte.
HasLinkedIPv4 Whether this address has a linked IPv4 address (see GetLinkedIPv4()).
IsAddrV1Compatible Check if the current object can be serialized in pre-ADDRv2/BIP155 format.
IsBindAny Whether this address is the INADDR_ANY / "bind any" wildcard address.
IsCJDNS Whether this is a CJDNS address.
IsHeNet Whether this is an IPv6 Hurricane Electric address (2001:0470::/36).
IsI2P Whether this is an I2P address.
IsIPv4 Whether this is an IPv4 address (::FFFF:0:0/96, 0.0.0.0/0).
IsIPv6 Whether this is a native IPv6 address (not mapped IPv4, not Tor).
IsInternal Whether this is an internal (NET_INTERNAL) address.
IsLocal Whether this is a local (loopback) address.
IsPrivacyNet Whether this object is a privacy network. TODO: consider adding IsCJDNS() here when more peers adopt CJDNS, see: https://github.com/bitcoin/bitcoin/pull/27411#issuecomment-1497176155
IsRFC1918 Whether this is an IPv4 private-network address (10/8, 192.168/16, 172.16/12).
IsRFC2544 Whether this is an IPv4 inter-network benchmarking address (198.18.0.0/15).
IsRFC3849 Whether this is an IPv6 documentation address (2001:0DB8::/32).
IsRFC3927 Whether this is an IPv4 link-local autoconfig address (169.254.0.0/16).
IsRFC3964 Whether this is an IPv6 6to4 tunnelling address (2002::/16).
IsRFC4193 Whether this is an IPv6 unique-local address (FC00::/7).
IsRFC4380 Whether this is an IPv6 Teredo tunnelling address (2001::/32).
IsRFC4843 Whether this is an IPv6 ORCHID (deprecated) address (2001:10::/28).
IsRFC4862 Whether this is an IPv6 link-local autoconfig address (FE80::/64).
IsRFC5737 Whether this is an IPv4 documentation address (192.0.2/24, 198.51.100/24, 203.0.113/24).
IsRFC6052 Whether this is an IPv6 well-known prefix for IPv4-embedded addresses (64:FF9B::/96).
IsRFC6145 Whether this is an IPv6 IPv4-translated address (::FFFF:0:0:0/96).
IsRFC6598 Whether this is an IPv4 ISP-level NAT (shared) address (100.64.0.0/10).
IsRFC7343 Whether this is an IPv6 ORCHIDv2 address (2001:20::/28).
IsRelayable Whether this address should be relayed to other peers even if we can't reach it ourselves.
IsRoutable Whether this address is publicly routable.
IsTor Whether this is a Tor onion address.
IsValid Whether this address is valid.
SetIP Copy the address value from another CNetAddr.
SetInternal Set this address to an internal address derived from a string or FQDN.
SetLegacyIPv6 Set from a legacy IPv6 address. Legacy IPv6 address may be a normal IPv6 address, or another address (e.g. IPv4) disguised as IPv6. This encoding is used in the legacy addr encoding.
SetSockAddr Set CService from a network sockaddr.
SetSpecial Parse a Tor or I2P address and set this object to it.
ToStringAddr Get the address as a human-readable string, without a port.
ToStringAddrPort Get a human-readable representation of the address and port.

Static Data Members

NameDescription
V1 Serialization parameters for the legacy ADDRv1 encoding.
V2 Serialization parameters for the BIP155 ADDRv2 encoding.

Protected Data Members

NameDescription
m_addr Raw representation of the network address. In network byte order (big endian) for IPv4 and IPv6.
m_net Network to which this address belongs.
m_scope_id Scope id if scoped/link-local IPV6 address. See https://tools.ietf.org/html/rfc4007
port TCP port number, in host byte order.

Friends

NameDescription
MaybeFlipIPv6toCJDNSIf an IPv6 address belongs to the address range used by the CJDNS network and the CJDNS network is reachable (-cjdnsreachable config is set), then change the type from NET_IPV6 to NET_CJDNS.
CServiceHashHasher for CService, suitable for use with unordered containers.
operator<Order two services.
operator==Compare two services for equality.

Non-Member Functions

NameDescription
AddLocalRecord a local address that we may advertise, scored by nScore.
AddLocalRecord a local address (with port) that we may advertise, scored by nScore.
ConnectDirectlyCreate a socket and try to connect to the specified service, using the provided timeout.
ConnectDirectlyCreate a socket and try to connect to the specified service.
DefaultOnionServiceTargetBuild the default local target address for the onion service.
GetBindAddressGet the bind address for a socket as CService.
GetLocalAddrForPeerReturns a local address that we should advertise to this peer.
GetLocalAddressReturn the best local address to use when talking to the given peer.
IsLocalReturn whether the given address is one of our known local addresses.
IsProxyCheck whether an address is one of the configured proxies.
LookupResolve a service string to its corresponding service.
LookupResolve a service string to its first corresponding service.
LookupNumericResolve a service string with a numeric IP to its first corresponding service.
NATPMPRequestPortMapTry to open a port using RFC 6886 NAT-PMP. IPv4 only.
RemoveLocalForget a previously recorded local address.
SeenLocalMark a local address as having been seen, returning whether it was already known.
operator<Order two addresses.
operator==Compare two addresses for equality.

Derived Classes

NameDescription
CAddress A CService with information about it as peer