class EventMachine::Synchrony::TCPSocket
def handle_read(type, num_bytes, dest=nil)
def handle_read(type, num_bytes, dest=nil) # read(-n) always raises ArgumentError # recv(-n) always raises ArgumentError raise ArgumentError, "negative length #{num_bytes} given" if num_bytes != nil and num_bytes < 0 # read(n) on a socket after #close, raises IOError with message "closed stream" # read(0) on a socket after #close, raises IOError with message "closed stream" # read() on a socket after #close, raises IOError with message "closed stream" # recv(n) on a socket after #close, raises IOError with message "closed stream" # recv(0) on a socket after #close, raises IOError with message "closed stream" raise IOError, "closed stream" if @closed # read(0) on an open socket, return "" # read(0) on a remotely closed socket, with buffered data, returns "" # read(0) on a remotely closed socket, with no buffered data, returns "" # recv(0) on an open socket, return "" # recv(0) on a remotely closed socket, with buffered data, returns "" # recv(0) on a remotely closed socket, with no buffered data, returns "" return "" if num_bytes == 0 @read_type = type @read_bytes = num_bytes @read_dest = dest if dest (data = read_data) != :block ? data : sync(:in) end