Class: TCPSocket

Inherits:
IPSocket show all
Defined in:
mrbgems/mruby-socket/mrblib/socket.rb

Direct Known Subclasses

TCPServer

Instance Attribute Summary

Attributes inherited from BasicSocket

#do_not_reverse_lookup

Instance Method Summary collapse

Methods inherited from IPSocket

#addr, getaddress, #peeraddr, #recvfrom

Methods inherited from BasicSocket

do_not_reverse_lookup, do_not_reverse_lookup=, for_fd, #local_address, #recv_nonblock, #remote_address

Methods inherited from IO

#each, #each_byte, #each_char, #hash, open, pipe, popen, #pos=, #printf, read, #rewind

Constructor Details

#initialize(host, service, local_host = nil, local_service = nil) ⇒ TCPSocket

call-seq:

TCPSocket.new(host, service, local_host=nil, local_service=nil) -> tcpsocket

Creates a new TCP socket connected to the given host and service. Optionally binds to local_host and local_service first.

sock = TCPSocket.new("localhost", 80)
sock = TCPSocket.new("www.example.com", "http")
sock = TCPSocket.new("remote", 80, "127.0.0.1", 12345)


529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 529

def initialize(host, service, local_host=nil, local_service=nil)
  if @init_with_fd
    super(host, service)
  else
    s = nil
    e = SocketError
    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
      rescue => e0
        e = e0
      end
    }
    raise e
  end
end