[ruby-cvs:67447] akr:r60266 (trunk): Deprecation document for gethostbyname, gethostbyaddr.

akr at ruby-lang.org akr at ruby-lang.org
Sat Oct 21 22:13:02 JST 2017

akr	2017-10-21 22:13:02 +0900 (Sat, 21 Oct 2017)

  New Revision: 60266


    Deprecation document for gethostbyname,gethostbyaddr.
    [Feature #13097]
    I confirmed current ruby (Ruby 2.4 and trunk) uses
    gethostbyname() and gethostbyaddr().
    Socket.gethostbyname uses getaddrinfo() and gethostbyname().
    Socket.gethostbyaddr uses gethostbyaddr().
    Socket.gethostbyname uses gethostbyname() to obtain alias hostnames.
    RFC 3493 defines getaddrinfo()/getnameinfo() and
    describes the problems of gethostbyname()/gethostbyaddr().
    The problems are difficult protocol handling and thread-unsafety.
    Since Ruby has GVL, the thread-unsafety doesn't cause wrong result.
    But it may block other threads until finishing DNS query.
    Socket.gethostbyname has the protocol handling problem.
    It returns only one address family:
    % ruby -rpp -rsocket -e 'pp Socket.gethostbyname("www.wide.ad.jp")'
     " \x01\x02\x00\r\xFF\xFF\xF1\x02\x16>\xFF\xFEKe\x1C",
    www.wide.ad.jp has one IPv6 address and one IPv4 address.
    But Socket.gethostbyname returns only one address family, 10 (AF_INET6),
    which is the address family of the first address.
    Also, Socket.gethostbyname and Socket.gethostbyaddr uses
    4-bytes binary IPv4 address and 16-bytes binary IPv6 address.
    This is not usual in other socket API in Ruby.
    (Most socket API uses binary sockaddr string or Addrinfo object)
    I think Socket.gethostbyname and Socket.gethostbyaddr are too far
    from recommendable API.
    So, I added deprecation description for documents for them.

  Modified files:

More information about the ruby-cvs mailing list