class Nonnative::SocketPair
Attributes
proxy[R]
Public Class Methods
new(proxy)
click to toggle source
# File lib/nonnative/socket_pair.rb, line 5 def initialize(proxy) @proxy = proxy end
Public Instance Methods
connect(local_socket)
click to toggle source
# File lib/nonnative/socket_pair.rb, line 9 def connect(local_socket) remote_socket = create_remote_socket loop do ready = select([local_socket, remote_socket], nil, nil) break if pipe(ready, local_socket, remote_socket) break if pipe(ready, remote_socket, local_socket) end ensure local_socket.close remote_socket&.close end
Protected Instance Methods
create_remote_socket()
click to toggle source
# File lib/nonnative/socket_pair.rb, line 27 def create_remote_socket ::TCPSocket.new('0.0.0.0', proxy.port) end
pipe(ready, socket1, socket2)
click to toggle source
# File lib/nonnative/socket_pair.rb, line 31 def pipe(ready, socket1, socket2) if ready[0].include?(socket1) data = read(socket1) return true if data.empty? write socket2, data end false end
read(socket)
click to toggle source
# File lib/nonnative/socket_pair.rb, line 42 def read(socket) socket.recv(1024) end
write(socket, data)
click to toggle source
# File lib/nonnative/socket_pair.rb, line 46 def write(socket, data) socket.write(data) end