def accept(queue)
@closed and raise 'closed'
begin
loop do
case (socket = queue.pop)
when SocketQueue::CMD_CLOSE
break
else
begin
receive(socket)
rescue StandardError, ScriptError
@logger.warning("[#{Time.now.httpdate}] dispatch error: #{$!.message} (#{$!.class}): #{$!.backtrace[0]}")
ensure
begin
socket.close unless socket.closed?
rescue
@logger.warning("[#{Time.now.httpdate}] socket close error: #{$!.message} (#{$!.class}): #{$!.backtrace[0]}")
end
end
end
end
ensure
begin
close
rescue
@logger.warning("[#{Time.now.httpdate}] messenger close error: #{$!.message} (#{$!.class}): #{$!.backtrace[0]}")
ensure
@closed = true
end
end
nil
end