Class: Puma::MiniSSL::Socket

Inherits:
Object
  • Object
show all
Defined in:
lib/puma/minissl.rb

Instance Method Summary collapse

Constructor Details

#initialize(socket, engine) ⇒ Socket

Returns a new instance of Socket.



34
35
36
37
# File 'lib/puma/minissl.rb', line 34

def initialize(socket, engine)
  @socket = socket
  @engine = EngineWrapper.new(engine)
end

Instance Method Details

#closeObject



112
113
114
# File 'lib/puma/minissl.rb', line 112

def close
  @socket.close
end

#engine_read_allObject



60
61
62
63
64
65
66
# File 'lib/puma/minissl.rb', line 60

def engine_read_all
  output = @engine.read
  while output and additional_output = @engine.read
    output << additional_output
  end
  output
end

#flushObject



108
109
110
# File 'lib/puma/minissl.rb', line 108

def flush
  @socket.flush
end

#peeraddrObject



116
117
118
# File 'lib/puma/minissl.rb', line 116

def peeraddr
  @socket.peeraddr
end

#read_nonblock(size) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/puma/minissl.rb', line 68

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) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/puma/minissl.rb', line 43

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_ioObject



39
40
41
# File 'lib/puma/minissl.rb', line 39

def to_io
  @socket
end

#write(data) ⇒ Object Also known as: syswrite



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/puma/minissl.rb', line 86

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