PureBasic
PureBasic
Check Whether SSH Channel EOF Was Received
See more SSH Examples
Demonstrates the Chilkat Ssh.ChannelReceivedEof method, which reports whether an SSH EOF message has been received for a channel. The only argument is the channel number. EOF means the server will send no more ordinary channel data, but it does not close the channel.
Background: EOF and CLOSE are separate events, and the distinction matters when deciding whether a command has truly finished. A server commonly sends EOF first and CLOSE afterward; in that interval this method is true while
ChannelReceivedClose is still false, and the channel remains open and counted. EOF is the signal that all output has been produced — useful when you want to stop reading without waiting for the full close handshake. It returns false for an invalid, released, or locally closed channel.Chilkat PureBasic Downloads
IncludeFile "CkSsh.pb"
Procedure ChilkatExample()
success.i = 0
; Demonstrates the Ssh.ChannelReceivedEof method, which reports whether an SSH EOF message has
; been received for a channel. The only argument is the channel number. EOF means the server
; will send no more ordinary channel data, but it does not close the channel.
ssh.i = CkSsh::ckCreate()
If ssh.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
sshPort.i = 22
success = CkSsh::ckConnect(ssh,"ssh.example.com",sshPort)
If success = 0
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
; 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.
password.s = "mySshPassword"
success = CkSsh::ckAuthenticatePw(ssh,"mySshLogin",password)
If success = 0
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
channelNum.i = CkSsh::ckOpenSessionChannel(ssh)
If channelNum < 0
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
success = CkSsh::ckSendReqExec(ssh,channelNum,"ls -l /tmp")
If success = 0
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
; 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.
CkSsh::setCkReadTimeoutMs(ssh, 15000)
success = CkSsh::ckChannelReceiveToClose(ssh,channelNum)
If success = 0
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
If CkSsh::ckChannelReceivedEof(ssh,channelNum)
Debug "EOF was received -- no more ordinary channel data will arrive."
Else
Debug "No EOF has been received."
EndIf
CkSsh::ckDisconnect(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndProcedure