code: def expect_handshake(self, headers):
          
          init_req = yield self.reader.get()
          if init_req.message_type != Types.INIT_REQ:
              raise errors.UnexpectedError(
                  "You need to shake my hand first. Got %s" % repr(init_req)
              )
          self._extract_handshake_headers(init_req)
          self._handshake_performed = True
  
          self.writer.put(
              messages.InitResponseMessage(
                  PROTOCOL_VERSION, headers, init_req.id),
          )
  
          # The receive loop is started only after the handshake has been
          # completed.
          self._loop()
  
          raise tornado.gen.Return(init_req)
docs: Expect a handshake from the remote host.
  
          :param headers:
              Headers to respond with
          :returns:
              A future that resolves (with a value of None) when the handshake
              is complete.