code: def run(self):
          
          while True:
              try:
                  data = None
                  # Wait for a connection
                  if self.debug:
                      self.py3_wrapper.log("waiting for a connection")
  
                  connection, client_address = self.sock.accept()
                  try:
                      if self.debug:
                          self.py3_wrapper.log("connection from")
  
                      data = connection.recv(MAX_SIZE)
                      if data:
                          data = json.loads(data.decode("utf-8"))
                          if self.debug:
                              self.py3_wrapper.log(u"received %s" % data)
                          self.command_runner.run_command(data)
                  finally:
                      # Clean up the connection
                      connection.close()
              except Exception:
                  if data:
                      self.py3_wrapper.log("Command error")
                      self.py3_wrapper.log(data)
                  self.py3_wrapper.report_exception("command failed")
docs: Main thread listen to socket and send any commands to the
          CommandRunner.