twisted.names.srvconnect.SRVConnector
class documentationtwisted.names.srvconnect
View Source
(View In Hierarchy)
Implements interfaces: twisted.internet.interfaces.IConnector
A connector that looks up DNS SRV records.
RFC 2782 details how SRV records should be interpreted and selected for
subsequent connection attempts. The algorithm for using the records'
priority and weight is implemented in pickServer
.
Instance Variable | servers | List of candidate server records for future connection attempts. (type: list
of dns.Record_SRV ) |
Instance Variable | orderedServers | List of server records that have already been tried in this round of
connection attempts. (type: list
of dns.Record_SRV ) |
Method | __init__ | |
Method | connect | Start connection to remote server. |
Method | pickServer | Pick the next server. |
Method | stopConnecting | Stop attempting to connect. |
Method | disconnect | Disconnect whatever our are state is. |
Method | getDestination | Return destination this will try to connect to. |
Method | connectionFailed | Undocumented |
Method | connectionLost | Undocumented |
Method | _ebGotServers | Undocumented |
Method | _cbGotServers | Undocumented |
Method | _ebServiceUnknown | Connect to the default port when the service name is unknown. |
Method | _reallyConnect | Undocumented |
list
of dns.Record_SRV
)
list
of dns.Record_SRV
)
Parameters | domain | The domain to connect to. If passed as a unicode string, it will be
encoded using idna encoding. (type: bytes
or unicode ) |
defaultPort | Optional default port number to be used when SRV lookup fails and the
service name is unknown. This should be the port number associated with the
service name as defined by the IANA registry. (type: int ) |
Connect to the default port when the service name is unknown.
If no SRV records were found, the service name will be passed as the
port. If resolving the name fails with error.ServiceNameUnknownError
,
a final attempt is done using the default port.
Pick the next server.
This selects the next server from the list of SRV records according to their priority and weight values, as set out by the default algorithm specified in RFC 2782.
At the beginning of a round, servers
is populated with orderedServers
,
and the latter is made empty. servers
is the list of candidates, and orderedServers
is the list of servers that have already been tried.
First, all records are ordered by priority and weight in ascending order. Then for each priority level, a running sum is calculated over the sorted list of records for that priority. Then a random value between 0 and the final sum is compared to each record in order. The first record that is greater than or equal to that random value is chosen and removed from the list of candidates for this round.
Returns | A tuple of target hostname and port from the chosen DNS SRV record. (type: tuple
of native str
and int ) |