class Puma::MiniSSL::Socket
Public Class Methods
new(socket, engine)
click to toggle source
# File lib/puma/minissl.rb, line 4 def initialize(socket, engine) @socket = socket @engine = engine @peercert = nil end
Public Instance Methods
close()
click to toggle source
# File lib/puma/minissl.rb, line 84 def close begin # Try to setup (so that we can then close them) any # partially initialized sockets. while @engine.init? # Don't let this socket hold this loop forever. # If it can't send more packets within 1s, then # give up. return unless IO.select([@socket], nil, nil, 1) begin read_nonblock(1024) rescue Errno::EAGAIN end end done = @engine.shutdown while true enc = @engine.extract @socket.write enc notify = @socket.sysread(1024) @engine.inject notify done = @engine.shutdown break if done end rescue IOError, SystemCallError # nothing ensure @socket.close end end
engine_read_all()
click to toggle source
# File lib/puma/minissl.rb, line 31 def engine_read_all output = @engine.read while output and additional_output = @engine.read output << additional_output end output end
flush()
click to toggle source
# File lib/puma/minissl.rb, line 80 def flush @socket.flush end
peeraddr()
click to toggle source
# File lib/puma/minissl.rb, line 119 def peeraddr @socket.peeraddr end
peercert()
click to toggle source
# File lib/puma/minissl.rb, line 123 def peercert return @peercert if @peercert raw = @engine.peercert return nil unless raw @peercert = OpenSSL::X509::Certificate.new raw end
read_nonblock(size)
click to toggle source
# File lib/puma/minissl.rb, line 39 def read_nonblock(size) while true output = engine_read_all return output if output data = @socket.read_nonblock(size) @engine.inject(data) output = engine_read_all return output if output while neg_data = @engine.extract @socket.write neg_data end end end
readpartial(size)
click to toggle source
# File lib/puma/minissl.rb, line 14 def readpartial(size) while true output = @engine.read return output if output data = @socket.readpartial(size) @engine.inject(data) output = @engine.read return output if output while neg_data = @engine.extract @socket.write neg_data end end end
to_io()
click to toggle source
# File lib/puma/minissl.rb, line 10 def to_io @socket end
write(data)
click to toggle source
# File lib/puma/minissl.rb, line 57 def write(data) need = data.bytesize while true wrote = @engine.write data enc = @engine.extract while enc @socket.write enc enc = @engine.extract end need -= wrote return data.bytesize if need == 0 data = data[wrote..-1] end end