original_string: public static function connect($conn, $arg = null)
      {
          $obj = null;
          if (!isset(self::$_objs[$conn])) {
              self::$_objs[$conn] = [];
          }
          foreach (self::$_objs[$conn] as $tmp) {
              if (!($tmp->flag & self::FLAG_BUSY)) {
                  Client::debug('reuse conn \'', $tmp->conn, '\': ', $tmp->sock);
                  $obj = $tmp;
                  break;
              }
          }
          if ($obj === null && count(self::$_objs[$conn]) < Client::$maxBurst) {
              $obj = new self($conn);
              self::$_objs[$conn][] = $obj;
              Client::debug('create conn \'', $conn, '\'');
          }
          if ($obj !== null) {
              $obj->arg = $arg;
              if ($obj->flag & self::FLAG_OPENED) {
                  $obj->flag |= self::FLAG_REUSED;
              } else {
                  if (!$obj->openSock()) {
                      return false;
                  }
              }
              $obj->flag |= self::FLAG_BUSY;
              $obj->outBuf = null;
              $obj->outLen = 0;
          }
          return $obj;
      }
code: public static function connect($conn, $arg = null)
      {
          $obj = null;
          if (!isset(self::$_objs[$conn])) {
              self::$_objs[$conn] = [];
          }
          foreach (self::$_objs[$conn] as $tmp) {
              if (!($tmp->flag & self::FLAG_BUSY)) {
                  Client::debug('reuse conn \'', $tmp->conn, '\': ', $tmp->sock);
                  $obj = $tmp;
                  break;
              }
          }
          if ($obj === null && count(self::$_objs[$conn]) < Client::$maxBurst) {
              $obj = new self($conn);
              self::$_objs[$conn][] = $obj;
              Client::debug('create conn \'', $conn, '\'');
          }
          if ($obj !== null) {
              $obj->arg = $arg;
              if ($obj->flag & self::FLAG_OPENED) {
                  $obj->flag |= self::FLAG_REUSED;
              } else {
                  if (!$obj->openSock()) {
                      return false;
                  }
              }
              $obj->flag |= self::FLAG_BUSY;
              $obj->outBuf = null;
              $obj->outLen = 0;
          }
          return $obj;
      }
code_tokens: public static function connect ( $ conn , $ arg = null ) { $ obj = null ; if ( ! isset ( self :: $ _objs [ $ conn ] ) ) { self :: $ _objs [ $ conn ] = [ ] ; } foreach ( self :: $ _objs [ $ conn ] as $ tmp ) { if ( ! ( $ tmp -> flag & self :: FLAG_BUSY ) ) { Client :: debug ( 'reuse conn \'' , $ tmp -> conn , '\': ' , $ tmp -> sock ) ; $ obj = $ tmp ; break ; } } if ( $ obj === null && count ( self :: $ _objs [ $ conn ] ) < Client :: $ maxBurst ) { $ obj = new self ( $ conn ) ; self :: $ _objs [ $ conn ] [ ] = $ obj ; Client :: debug ( 'create conn \'' , $ conn , '\'' ) ; } if ( $ obj !== null ) { $ obj -> arg = $ arg ; if ( $ obj -> flag & self :: FLAG_OPENED ) { $ obj -> flag |= self :: FLAG_REUSED ; } else { if ( ! $ obj -> openSock ( ) ) { return false ; } } $ obj -> flag |= self :: FLAG_BUSY ; $ obj -> outBuf = null ; $ obj -> outLen = 0 ; } return $ obj ; }
docstring: Create connection, with built-in pool.
  @param string $conn connection string, like `protocal://host:port`.
  @param mixed $arg external argument, fetched by `[[getExArg()]]`
  @return static the connection object, null if it reaches the upper limit of concurrent, or false on failure.
docstring_tokens: Create connection with built - in pool .