1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

rescue SystemCallError

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5048 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
seki 2003-11-28 07:45:27 +00:00
parent 40cb49fce8
commit a1a2b66e0d

View file

@ -353,7 +353,13 @@ module DRb
# Error raised when an error occurs on the underlying communication
# protocol.
class DRbConnError < DRbError; end
class DRbConnError < DRbError
def self.new_with_error(cause)
conn_error = self.new(cause.message)
conn_error.set_backtrace(cause.backtrace)
conn_error
end
end
# Class responsible for converting between an object and its id.
#
@ -549,12 +555,20 @@ module DRb
end
def load(soc) # :nodoc:
sz = soc.read(4) # sizeof (N)
begin
sz = soc.read(4) # sizeof (N)
rescue
raise(DRbConnError.new_with_error($!))
end
raise(DRbConnError, 'connection closed') if sz.nil?
raise(DRbConnError, 'premature header') if sz.size < 4
sz = sz.unpack('N')[0]
raise(DRbConnError, "too large packet #{sz}") if @load_limit < sz
str = soc.read(sz)
begin
str = soc.read(sz)
rescue
raise(DRbConnError.new_with_error($!))
end
raise(DRbConnError, 'connection closed') if sz.nil?
raise(DRbConnError, 'premature marshal format(can\'t read)') if str.size < sz
begin