socket.getaddrinfo ()

socket.getaddrinfo ( host, port, family=0, type=0, proto=0, flags=0 )

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ host/port Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° с 5 Ρ‡Π»Π΅Π½Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для создания сокСта, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊ этой слуТбС. host - это Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ имя, строковоС прСдставлСниС адрСса IPv4/v6 ΠΈΠ»ΠΈ None. port - это строковоС имя слуТбы, Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ°ΠΊ 'http', числовой Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π° ΠΈΠ»ΠΈ None. ΠŸΠ΅Ρ€Π΅Π΄Π°Π² None Π² качСствС значСния host ΠΈ port, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ NULL Π² Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ API C.

АргумСнты сСмСйства family, Ρ‚ΠΈΠΏΠ° type ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° proto ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡƒΠ·ΠΈΡ‚ΡŒ список Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… адрСсов. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° нуля Π² качСствС значСния для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· этих Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². АргумСнт flags ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ нСсколькими константами AI_* ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° способ вычислСния ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². НапримСр, AI_NUMERICHOST ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ссли host являСтся Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список ΠΈΠ· ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° с 5 элСмСнтами со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ структурой:

(family, type, proto, canonname, sockaddr)

Π’ этих ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°Ρ… family, type, proto ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ socket (). canonname Π±ΡƒΠ΄Π΅Ρ‚ строкой, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ каноничСскоС имя хоста host, Ссли AI_CANONNAME являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° flags; ΠΈΠ½Π°Ρ‡Π΅ canonname Π±ΡƒΠ΄Π΅Ρ‚ пустым. sockaddr - это ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ адрСс сокСта, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ зависит ΠΎΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ сСмСйства family (ΠΊΠΎΡ€Ρ‚Π΅ΠΆ с 2 элСмСнтами (address, port) для AF_INET, ΠΊΠΎΡ€Ρ‚Π΅ΠΆ с 4 элСмСнтами (address, port, flowinfo, scope_id) для AF_INET6) ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ socket.connect ().

Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ событиС Π°ΡƒΠ΄ΠΈΡ‚Π° socket.getaddrinfo с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ host, port, family, type, protocol.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ извлСкаСтся адрСсная информация для гипотСтичСского TCP-соСдинСния с example.org Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΡ€Ρ‚ 80 (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² вашСй систСмС, Ссли IPv6 Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½):

>>> socket.getaddrinfo("example.org", 80, proto=socket.IPPROTO_TCP)
[(<AddressFamily.AF_INET6: 10>, <SocketType.SOCK_STREAM: 1>,
 6, '', ('2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0)),
 (<AddressFamily.AF_INET: 2>, <SocketType.SOCK_STREAM: 1>,
 6, '', ('93.184.216.34', 80))]

ИзмСнСно Π² вСрсии 3.2: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

ИзмСнСно Π² вСрсии 3.7: для адрСсов многоадрСсной рассылки IPv6 строка, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ адрСс, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ %scope_id Ρ‡Π°ΡΡ‚ΡŒ.

Last updated

Was this helpful?