# File lib/selenium/webdriver/safari/server.rb, line 30
        def receive
          @frame ||= WebSocket::Frame::Incoming::Server.new(:version => @version)

          until msg = @frame.next
            end_time = Time.now + @command_timeout

            begin
              data = @ws.read_nonblock(1)
            rescue Errno::EWOULDBLOCK, Errno::EAGAIN
              now = Time.now
              if now >= end_time
                raise Error::TimeOutError, "timed out waiting for Safari to respond"
              end

              IO.select([@ws], nil, nil, end_time - now)
              retry
            end

            @frame << data
          end

          puts "<<< #{msg}" if $DEBUG

          WebDriver.json_load msg.to_s
        end