# File ruby/bstream.rb, line 931
        def receiver_loop
          loop {
                begin
                  t,mcode = read(@socket)
                  dputs ": receiving a message : code=#{mcode}"
                  msid = nil
                  case mcode
                  when M_CALL
                        t,msid = read(@socket)
                        c = CallingOject.new.build_by_receiver(msid,@socket)
                        dputs ": received: OK : #{c.sid}"
                        received(c)
                  when M_RETURN
                        t,msid = read(@socket)
                        r = ResultObject.new.build_by_receiver(msid,@socket)
                        dputs ": received: RET: #{r.sid}"
                        @receiving_lock.synchronize do
                          @receiving_table[r.sid] = r
                          @receiving_waiter.broadcast
                        end
                        dputs ": receiving_waiter.broadcast"
                  else
                        dputs ": Unknown message code. try to reset the connection."
                        @socket_lock.synchronize do
                          @socket_state = :socket_closing
                        end
                        @sending_lock.synchronize do
                          @sending_waiter.broadcast
                        end
                        return
                  end # case

                  @socket_lock.synchronize do
                        if @socket_state == :socket_closing then
                          dputs ": receiver-thread terminating..."
                          return
                        end
                  end
                rescue => evar
                  mes = evar.message
                  if msid then
                        @receiving_lock.synchronize do
                          r = ResultObject.new.build_by_sender_error(msid,R_PROTOCOL_ERROR,"ResultObjectError",mes,evar.backtrace.join("\n"))
                          @receiving_table[msid] = r
                          @receiving_waiter.broadcast
                        end
                  end
                  dputs "[rcvloop] #{evar.to_s}"
                  if mes["close"] || mes["reset"] then
                        dputs ": [rcvloop] disconnected by remote host."
                        break
                  elsif evar.kind_of?(IOError) then
                        dputs ": [rcvloop] try to reset the connection."
                        @socket_lock.synchronize do
                          @socket_state = :socket_closing
                        end
                        break
                  else
                        dputs ": [rcvloop] going to recover the communication."
                  end
                end # begin rescue

          } # loop

        end