Issue #11179 has been updated by Akira Tanaka.

Status changed from Open to Third Party's Issue

The behavior is inherited from getaddrinfo() function in libc.
So it is difficult to fix the problem in Ruby.

----------------------------------------
Bug #11179: Inconsistent Addrinfo parsing a port number
https://bugs.ruby-lang.org/issues/11179#change-52915

* Author: Shin'ya Ueoka
* Status: Third Party's Issue
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.3.0dev (2015-05-25 trunk 50637) [x86_64-linux] 
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
In the case of the following code, ip_port returns 34464 because the number 99999 is cast as `short int`.
Is the result expected?

``` ruby
require 'socket'
Addrinfo.tcp('', 99999).ip_port    # => 34463
```

Even if the above behavior is correct, ip_port should return 65535 in the following code.  But actually, Addrinfo raises an exception because -1 is parsed as service name.  This behavior is inconsistent with the above.

``` ruby
require 'socket'
Addrinfo.tcp('', -1).ip_port     # => Servname not supported for ai_socktype (SocketError)
```




-- 
https://bugs.ruby-lang.org/