Misc #10907
closedDocumentation of Addrinfo.new suggests default family of PF_UNSPEC while in practise it appears to be AF_INET
Description
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
AF_INET
- The behaviour is incorrect, it should be
PF_UNSPEC
instead ofAF_INET
- 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 yorickpeterse (Yorick Peterse) almost 10 years ago
By the way, this was tested using ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]
on Arch Linux (Linux yorickpeterse-macbook-olery 3.17.6-1-ARCH #1 SMP PREEMPT Sun Dec 7 23:43:32 UTC 2014 x86_64 GNU/Linux
).
Updated by yorickpeterse (Yorick Peterse) almost 10 years ago
It seems I am confusing afamily
with pfamily
. The pfamily
indeed returns Socket::PF_UNSPEC
by default.
Updated by akr (Akira Tanaka) almost 10 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().
Updated by akr (Akira Tanaka) almost 10 years ago
- Related to Bug #10908: Addrinfo.new appears to ignore the afamily argument when using a String for sockaddr added