docs: def send(self, *fields):
          """
          Serialize and send the given fields using the IB socket protocol.
          """
          if not self.isConnected():
              raise ConnectionError('Not connected')
  
          msg = io.StringIO()
          for field in fields:
              typ = type(field)
              if field in (None, UNSET_INTEGER, UNSET_DOUBLE):
                  s = ''
              elif typ in (str, int, float):
                  s = str(field)
              elif typ is bool:
                  s = '1' if field else '0'
              elif typ is list:
                  # list of TagValue
                  s = ''.join(f'{v.tag}={v.value};' for v in field)
              elif isinstance(field, Contract):
                  c = field
                  s = '\0'.join(str(f) for f in (
                      c.conId, c.symbol, c.secType,
                      c.lastTradeDateOrContractMonth, c.strike,
                      c.right, c.multiplier, c.exchange,
                      c.primaryExchange, c.currency,
                      c.localSymbol, c.tradingClass))
              else:
                  s = str(field)
              msg.write(s)
              msg.write('\0')
          self.sendMsg(msg.getvalue())