Project

General

Profile

Misc #10907

Documentation of Addrinfo.new suggests default family of PF_UNSPEC while in practise it appears to be AF_INET

Added by yorickpeterse (Yorick Peterse) almost 4 years ago. Updated almost 4 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
[ruby-core:68320]

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:

  1. The documentation is simply incorrect, the default is always AF_INET
  2. The behaviour is incorrect, it should be PF_UNSPEC instead of AF_INET
  3. 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.


Related issues

Related to Ruby trunk - Bug #10908: Addrinfo.new appears to ignore the afamily argument when using a String for sockaddrRejected02/26/2015Actions

History

Updated by yorickpeterse (Yorick Peterse) almost 4 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 4 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 4 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().

#4

Updated by akr (Akira Tanaka) almost 4 years ago

  • Related to Bug #10908: Addrinfo.new appears to ignore the afamily argument when using a String for sockaddr added

Also available in: Atom PDF