Sample code for 30+ languages & platforms
DataFlex

Release an SSH Channel's Local Resources

See more SSH Examples

Demonstrates the Chilkat Ssh.ChannelRelease method, which releases Chilkat's retained local resources for a channel after all output and exit information has been retrieved. The only argument is the channel number.

Background: Chilkat retains a channel's buffered output and exit information after the channel closes, so you can still read a command's final output. That retention costs memory, and a long-running program that opens many channels should release each one when finished with it. Note this is not a channel-closing method — it sends neither EOF nor CLOSE. Retrieve everything you need first, because releasing discards it.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoSsh
    Integer iSshPort
    String sPassword
    Integer iChannelNum
    String sOutput
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

    //  Demonstrates the Ssh.ChannelRelease method, which releases Chilkat's retained local resources
    //  for a channel after all output and exit information has been retrieved.  The only argument is
    //  the channel number.

    Get Create (RefClass(cComChilkatSsh)) To hoSsh
    If (Not(IsComObjectCreated(hoSsh))) Begin
        Send CreateComObject of hoSsh
    End

    Move 22 To iSshPort
    Get ComConnect Of hoSsh "ssh.example.com" iSshPort To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Normally you would not hard-code the password in source.  You should instead obtain it
    //  from an interactive prompt, environment variable, or a secrets vault.
    Move "mySshPassword" To sPassword

    Get ComAuthenticatePw Of hoSsh "mySshLogin" sPassword To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Open a session channel.  A negative return value indicates failure.
    Get ComOpenSessionChannel Of hoSsh To iChannelNum
    If (iChannelNum < 0) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComSendReqExec Of hoSsh iChannelNum "uname -a" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  IMPORTANT: Set a read timeout.  ReadTimeoutMs defaults to 0, which means no limit -- without
    //  it, this call waits forever if the server never sends channel close.
    Set ComReadTimeoutMs Of hoSsh To 15000

    //  Retrieve everything of interest before releasing the channel.
    Get ComChannelReceiveToClose Of hoSsh iChannelNum To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComGetReceivedText Of hoSsh iChannelNum "utf-8" To sOutput
    Get ComLastMethodSuccess Of hoSsh To bTemp1
    If (bTemp1 = False) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Showln sOutput

    //  Release the retained local resources.  This does not send EOF or CLOSE.
    Send ComChannelRelease To hoSsh iChannelNum

    Send ComDisconnect To hoSsh


End_Procedure