Ticket #15528 (closed defect: fixed)
ruby @1.8.6-p114 patch to get Ruby's Socket classes to work with getaddrinfo under 10.5.3
| Reported by: | aguynamedryan+macports@… | Owned by: | pguyot@… |
|---|---|---|---|
| Priority: | Normal | Milestone: | |
| Component: | ports | Version: | 1.6.0 |
| Keywords: | ruby getaddrinfo 10.5.3 drb TCPServer | Cc: | |
| Port: |
Description
Kurt Schrader posted in this thread, that after upgrading to Mac OS X 10.5.3 some calls to DRb fail with:
/opt/local/lib/ruby/1.8/drb/drb.rb:865:in `initialize': getaddrinfo: nodename nor servname provided, or not known (SocketError) from /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `open' from /opt/local/lib/ruby/1.8/drb/drb.rb:865:in `open_server'
It appears that Ruby's calls to getaddrinfo which pass "0" for the servname argument are now returning EAI_NONAME instead of 0, which causes ruby to raise a SocketError
Andy Keep discovered that feeding nil in place of of "0" for the service number works:
irb(main):001:0> require 'socket' => true irb(main):011:0> Socket.getaddrinfo(Socket.gethostname, 0, Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME) SocketError: getaddrinfo: nodename nor servname provided, or not known from (irb):11:in `getaddrinfo' from (irb):11 from :0 irb(main):012:0> Socket.getaddrinfo(Socket.gethostname, nil, Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME) => [["AF_INET", 0, "192.168.1.95", "192.168.1.95", 2, 1, 6]]
I have discovered that TCPServer.open('localhost', 0) also fails under 10.5.3 both in MacPorts and in the Ruby installation that ships with Mac OS X Leopard.
I have very little socket programming experience, but I have made a patch that changes Socket's servname argument of "0" and replaces it with NULL before it is passed to getaddrinfo.
I have no idea what unintended effects this might cause, but it seems to have cleared up my problems with DRb and TCPServer for the time being.
Attachments
Change History
Changed 5 years ago by aguynamedryan+macports@…
- Attachment patch-test_socket.rb added
Changed 5 years ago by aguynamedryan+macports@…
- Attachment patch-socket.c added
Adds a some code that replaces a servname of "0" with NULL before calling getaddrinfo
Changed 5 years ago by aguynamedryan+macports@…
- Attachment Portfile-ruby.diff added
Updated Portfile to apply new patches when compiling on the darwin 9 platform
comment:2 Changed 5 years ago by jmr@…
- Cc aguynamedryan+macports@… removed
- Owner changed from macports-tickets@… to pguyot@…
Assigning to maintainer.


Adds a few test cases which expose some of the breakage caused by 10.5.3's change to getaddrinfo