MCPcopy Index your code
hub / github.com/RustPython/RustPython / getnameinfo

Function getnameinfo

crates/stdlib/src/socket.rs:3013–3057  ·  view source on GitHub ↗
(
        address: PyTupleRef,
        flags: i32,
        vm: &VirtualMachine,
    )

Source from the content-addressed store, hash-verified

3011
3012 #[pyfunction]
3013 fn getnameinfo(
3014 address: PyTupleRef,
3015 flags: i32,
3016 vm: &VirtualMachine,
3017 ) -> Result<(String, String), IoOrPyException> {
3018 match address.len() {
3019 2..=4 => {}
3020 _ => {
3021 return Err(vm.new_type_error("illegal sockaddr argument").into());
3022 }
3023 }
3024 let (addr, flowinfo, scopeid) = Address::from_tuple_ipv6(&address, vm)?;
3025 let hints = dns_lookup::AddrInfoHints {
3026 address: c::AF_UNSPEC,
3027 socktype: c::SOCK_DGRAM,
3028 flags: c::AI_NUMERICHOST,
3029 protocol: 0,
3030 };
3031 let service = addr.port.to_string();
3032 let host_str = addr.host.as_str();
3033 let mut res = dns_lookup::getaddrinfo(Some(host_str), Some(&service), Some(hints))
3034 .map_err(|e| convert_socket_error(vm, e, SocketError::GaiError))?
3035 .filter_map(Result::ok);
3036 let mut ainfo = res.next().unwrap();
3037 if res.next().is_some() {
3038 return Err(vm
3039 .new_os_error("sockaddr resolved to multiple addresses".to_owned())
3040 .into());
3041 }
3042 match &mut ainfo.sockaddr {
3043 SocketAddr::V4(_) => {
3044 if address.len() != 2 {
3045 return Err(vm
3046 .new_os_error("IPv4 sockaddr must be 2 tuple".to_owned())
3047 .into());
3048 }
3049 }
3050 SocketAddr::V6(addr) => {
3051 addr.set_flowinfo(flowinfo);
3052 addr.set_scope_id(scopeid);
3053 }
3054 }
3055 dns_lookup::getnameinfo(&ainfo.sockaddr, flags)
3056 .map_err(|e| convert_socket_error(vm, e, SocketError::GaiError))
3057 }
3058
3059 #[cfg(unix)]
3060 #[pyfunction]

Callers 2

gethostbyaddrFunction · 0.85
gethostbyname_exFunction · 0.85

Calls 11

convert_socket_errorFunction · 0.85
to_stringMethod · 0.80
new_os_errorMethod · 0.80
getaddrinfoFunction · 0.70
ErrClass · 0.50
SomeClass · 0.50
lenMethod · 0.45
as_strMethod · 0.45
unwrapMethod · 0.45
nextMethod · 0.45
to_ownedMethod · 0.45

Tested by

no test coverage detected