summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-03-02 08:36:16 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-03-02 08:36:16 +0000
commitb1f493dcd1092fe17cccec998e175516ed5c6e47 (patch)
tree7da13704ac0243a526245530b0a5f75095e34c47 /lib
parente563e6bf1066a78d555dceba052bf9f2166271a1 (diff)
* lib/webrick/utils.rb: use Socket.tcp_server_sockets to create server
sockets. fix [Bug #7100] https://bugs.ruby-lang.org/issues/7100 reported by sho-h (Sho Hashimoto). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39551 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/webrick/utils.rb23
1 files changed, 4 insertions, 19 deletions
diff --git a/lib/webrick/utils.rb b/lib/webrick/utils.rb
index f2373572ce..a6b5cc6a9c 100644
--- a/lib/webrick/utils.rb
+++ b/lib/webrick/utils.rb
@@ -72,26 +72,11 @@ module WEBrick
unless port
raise ArgumentError, "must specify port"
end
- res = Socket::getaddrinfo(address, port,
- Socket::AF_UNSPEC, # address family
- Socket::SOCK_STREAM, # socket type
- 0, # protocol
- Socket::AI_PASSIVE) # flag
- last_error = nil
- sockets = []
- res.each{|ai|
- begin
- logger.debug("TCPServer.new(#{ai[3]}, #{port})") if logger
- sock = TCPServer.new(ai[3], port)
- port = sock.addr[1] if port == 0
- Utils::set_close_on_exec(sock)
- sockets << sock
- rescue => ex
- logger.warn("TCPServer Error: #{ex}") if logger
- last_error = ex
- end
+ sockets = Socket.tcp_server_sockets(address, port)
+ sockets = sockets.map {|s|
+ s.autoclose = false
+ TCPServer.for_fd(s.fileno)
}
- raise last_error if sockets.empty?
return sockets
end
module_function :create_listeners