Method: Libuv::Stream#read

Defined in:
lib/libuv/mixins/stream.rb

#read(maxlen = nil, outbuf = nil) ⇒ Object Also known as: read_nonblock

Very basic IO emulation, in no way trying to be exact

Raises:

  • (::EOFError)


131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/libuv/mixins/stream.rb', line 131

def read(maxlen = nil, outbuf = nil)
    raise ::EOFError.new('socket closed') if @closed
    @read_defer = @reactor.defer

    if @read_buffer.nil?
        start_read
        @read_buffer = String.new
        self.finally do
            @read_defer.reject(::EOFError.new('socket closed'))
        end
    end

    if check_read_buffer(maxlen, outbuf, @read_defer)
        progress do |data|
            @read_buffer << data
            check_read_buffer(maxlen, outbuf, @read_defer)
        end
    end

    @read_defer.promise.value
end