summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTomoyuki Sahara <[email protected]>2017-02-08 19:04:11 +0900
committerTomoyuki Sahara <[email protected]>2017-02-08 19:04:11 +0900
commit3dad125a1cd93e70a1762e9c6a1d5e01554ad71c (patch)
tree15a4781b8aa760aadac88566ec97468de64a3f58
parentb2a0c9c6bf62273b734d715e6eaab4c1f2c2892c (diff)
downloadmruby-3dad125a1cd93e70a1762e9c6a1d5e01554ad71c.tar.gz
mruby-3dad125a1cd93e70a1762e9c6a1d5e01554ad71c.zip
TCPSocket.new supports "local_host" and "local_service".
-rw-r--r--mrblib/socket.rb6
1 files changed, 6 insertions, 0 deletions
diff --git a/mrblib/socket.rb b/mrblib/socket.rb
index a32a3334d..f7d4ce3a8 100644
--- a/mrblib/socket.rb
+++ b/mrblib/socket.rb
@@ -236,6 +236,12 @@ class TCPSocket
Addrinfo.foreach(host, service) { |ai|
begin
s = Socket._socket(ai.afamily, Socket::SOCK_STREAM, 0)
+ if local_host or local_service
+ local_host ||= (ai.afamily == Socket::AF_INET) ? "0.0.0.0" : "::"
+ local_service ||= "0"
+ bi = Addrinfo.getaddrinfo(local_host, local_service, ai.afamily, ai.socktype)[0]
+ Socket._bind(s, bi.to_sockaddr)
+ end
Socket._connect(s, ai.to_sockaddr)
super(s, "r+")
return