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

Synopsis

Declared in <netaddress.h>

class CService
    : public CNetAddr

Base Classes

Name

Description

CNetAddr

Network address.

Types

Name

Description

SerParams

Serialization parameters selecting the address wire encoding.

Enums

Name

Description

BIP155Network

BIP155 network ids recognized by this software.

Encoding

Wire encoding used when (un)serializing an address.

Member Functions

Name

Description

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

Name

Description

V1

Serialization parameters for the legacy ADDRv1 encoding.

V2

Serialization parameters for the BIP155 ADDRv2 encoding.

Protected Data Members

Name

Description

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

Name

Description

MaybeFlipIPv6toCJDNS

If 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.

CServiceHash

Hasher for CService, suitable for use with unordered containers.

operator<

Order two services.

operator==

Compare two services for equality.

Non-Member Functions

Name

Description

AddLocal

Record a local address that we may advertise, scored by nScore.

AddLocal

Record a local address (with port) that we may advertise, scored by nScore.

ConnectDirectly

Create a socket and try to connect to the specified service, using the provided timeout.

ConnectDirectly

Create a socket and try to connect to the specified service.

DefaultOnionServiceTarget

Build the default local target address for the onion service.

GetBindAddress

Get the bind address for a socket as CService.

GetLocalAddrForPeer

Returns a local address that we should advertise to this peer.

GetLocalAddress

Return the best local address to use when talking to the given peer.

IsLocal

Return whether the given address is one of our known local addresses.

IsProxy

Check whether an address is one of the configured proxies.

Lookup

Resolve a service string to its corresponding service.

Lookup

Resolve a service string to its first corresponding service.

LookupNumeric

Resolve a service string with a numeric IP to its first corresponding service.

NATPMPRequestPortMap

Try to open a port using RFC 6886 NAT‐PMP. IPv4 only.

RemoveLocal

Forget a previously recorded local address.

SeenLocal

Mark 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

Name

Description

CAddress

A CService with information about it as peer

Created with MrDocs