Documentation of Addrinfo.new suggests default family of PF_UNSPEC while in practise it appears to be AF_INET
The documentation of Addrinfo.new states the following:
family is specified as an integer to specify the protocol family such as
Socket::PF_INET. It can be a symbol or a string which is the constant name
with or without PF_ prefix such as :INET, :INET6, :UNIX, "PF_INET", etc. If
omitted, PF_UNSPEC is assumed.
However, the behaviour contradicts this:
Addrinfo.new(Socket.sockaddr_in(80, 'localhost')).afamily == Socket::PF_UNSPEC # => false Addrinfo.new(Socket.sockaddr_in(80, 'localhost')).afamily == Socket::AF_INET # => true
The question here is, which of the following is the case:
- The documentation is simply incorrect, the default is always
- The behaviour is incorrect, it should be
- This is platform specific (meaning the documentation should state this)
On Twitter Matz mentioned
(https://twitter.com/YorickPeterse/status/570700823526830080) thinking it was
platform specific, but I'd like to be 100% sure about this.
Updated by akr (Akira Tanaka) over 5 years ago
- Status changed from Open to Rejected
Use pfamily as you noticed.
pfamily (and 2nd argument for Addrinfo.new) corresponds to ai_family field of struct addrinfo and will be used for 1st argument of socket().
afamily (and first 1 or 2 bytes in 1st argument for Addrinfo.new) corresponds to sa_family field of struct sockaddr and will be used for bind() or connect().