面试题答案
一键面试getaddrinfo
函数参数及含义:host
:要解析的主机名或IP地址。例如,'www.example.com'
或'192.168.1.1'
。port
:要解析的端口号,可以是整数(如80
代表HTTP),也可以是服务名(如'http'
)。family
:地址族,可选值有socket.AF_INET
(IPv4)、socket.AF_INET6
(IPv6)、socket.AF_UNSPEC
(自动选择)。默认是socket.AF_UNSPEC
。socktype
:套接字类型,常见的有socket.SOCK_STREAM
(TCP流套接字)、socket.SOCK_DGRAM
(UDP数据报套接字)。默认是0
,表示根据协议自动选择。proto
:协议号,通常为0
表示自动选择。常见值如socket.IPPROTO_TCP
用于TCP,socket.IPPROTO_UDP
用于UDP。flags
:标志位,用于修改解析行为,常见值如socket.AI_PASSIVE
用于被动模式(如服务器绑定地址)。默认是0
。
- 示例代码:
import socket
try:
addr_info = socket.getaddrinfo('www.example.com', 'http', socket.AF_UNSPEC, socket.SOCK_STREAM)
for item in addr_info:
print(item)
except socket.gaierror as e:
print(f"地址解析错误: {e}")
上述代码中,使用 socket.getaddrinfo
解析 www.example.com
的HTTP服务地址信息。通过循环打印 addr_info
中的每一项,展示获取到的套接字地址信息。如果解析过程中出现错误,会捕获并打印错误信息。