Class: Cosmos::TcpipClientStream
- Inherits:
-
TcpipSocketStream
- Object
- Stream
- TcpipSocketStream
- Cosmos::TcpipClientStream
- Defined in:
- lib/cosmos/streams/tcpip_client_stream.rb
Overview
Data Stream which reads and writes to TCPIP sockets. This class creates the actual sockets based on the constructor parameters. The rest of the interface is implemented by the super class TcpipSocketStream.
Instance Attribute Summary
Attributes inherited from TcpipSocketStream
Attributes inherited from Stream
Instance Method Summary collapse
-
#initialize(hostname, write_port, read_port, write_timeout, read_timeout) ⇒ TcpipClientStream
constructor
A new instance of TcpipClientStream.
Methods inherited from TcpipSocketStream
#connected?, #disconnect, #read, #read_nonblock, #write
Methods inherited from Stream
#connected?, #disconnect, #read, #read_nonblock, #write
Constructor Details
#initialize(hostname, write_port, read_port, write_timeout, read_timeout) ⇒ TcpipClientStream
Returns a new instance of TcpipClientStream.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/cosmos/streams/tcpip_client_stream.rb', line 31 def initialize(hostname, write_port, read_port, write_timeout, read_timeout) @hostname = hostname if (@hostname.to_s.upcase == 'LOCALHOST') @hostname = '127.0.0.1' end @write_port = ConfigParser.handle_nil(write_port) @write_port = Integer(write_port) if @write_port @read_port = ConfigParser.handle_nil(read_port) @read_port = Integer(read_port) if @read_port write_addr = nil read_addr = nil begin write_addr = Socket.pack_sockaddr_in(@write_port, @hostname) if @write_port read_addr = Socket.pack_sockaddr_in(@read_port, @hostname) if @read_port rescue => error if error. =~ /getaddrinfo/ raise "Invalid hostname: #{@hostname}" else raise error end end write_socket = nil if write_addr write_socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0) write_socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) write_socket.connect(write_addr) end read_socket = nil if read_addr if @write_port != @read_port read_socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0) read_socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) read_socket.connect(read_addr) else read_socket = write_socket end end super(write_socket, read_socket, write_timeout, read_timeout) end |