code: public String bind(BindParameter bindParam, long timeout)
        throws IOException {
      try {
        String smscSystemId = sendBind(bindParam.getBindType(), bindParam.getSystemId(), bindParam.getPassword(), bindParam.getSystemType(),
            bindParam.getInterfaceVersion(), bindParam.getAddrTon(), bindParam.getAddrNpi(), bindParam.getAddressRange(), timeout);
        sessionContext.bound(bindParam.getBindType());
  
        logger.info("Start EnquireLinkSender");
        enquireLinkSender = new EnquireLinkSender();
        enquireLinkSender.start();
  
        return smscSystemId;
      } catch (PDUException e) {
        logger.error("Failed sending bind command", e);
        throw new IOException("Failed sending bind since some string parameter area invalid: " + e.getMessage(), e);
      } catch (NegativeResponseException e) {
        String message = "Receive negative bind response";
        logger.error(message, e);
        close();
        throw new IOException(message + ": " + e.getMessage(), e);
      } catch (InvalidResponseException e) {
        String message = "Receive invalid response of bind";
        logger.error(message, e);
        close();
        throw new IOException(message + ": " + e.getMessage(), e);
      } catch (ResponseTimeoutException e) {
        String message = "Waiting bind response take time too long";
        logger.error(message, e);
        close();
        throw new IOException(message + ": " + e.getMessage(), e);
      } catch (IOException e) {
        logger.error("IO error occurred", e);
        close();
        throw e;
      }
    }
docs: Bind immediately.
  
  @param bindParam is the bind parameters.
  @param timeout is the timeout.
  @return the SMSC system id.
  @throws IOException if there is an IO error found.