[ 
https://issues.apache.org/jira/browse/SSHD-781?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16222127#comment-16222127
 ] 

Guillaume Nodet commented on SSHD-781:
--------------------------------------

The heart beat is actually named "keep alive", so it's sole purpose is to keep 
the connection alive.
There's no response to be expected from that.  But if something wrong happen, 
such as a disconnect, the client should now be closed automatically.

> The heartbeat task of client not support keepalive function well
> ----------------------------------------------------------------
>
>                 Key: SSHD-781
>                 URL: https://issues.apache.org/jira/browse/SSHD-781
>             Project: MINA SSHD
>          Issue Type: Question
>    Affects Versions: 1.4.0, 1.6.0
>         Environment: Any environment
>            Reporter: MayDay
>            Assignee: Guillaume Nodet
>              Labels: test
>             Fix For: 1.7.0
>
>
>  
>         The heartbeat request of sshClient is a SSH_MSG_GLOBAL_REQUEST, but 
> the default buffer of heartbeat set false (see 
> [ClientConnectService#sendHeartbeat|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientConnectionService.java])
> {code:java}
> buf.putBoolean(false);
> {code}
>         The sshServer reponse the heartbeat by the 
> [KeepAliveHandler|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/server/global/KeepAliveHandler.java],
>  then [AbstractConnectionService 
> #sendGlobalResponse|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractConnectionService.java].
> {code:java}
>  boolean wantReply = buffer.getBoolean();
> {code}
>        but if the buffer of heartbeat set false, then the sendGlobalResponse 
> will not reponse sshClient {color:#205081}because of the wantReply is 
> false{color} .(see [AbstractConnectionService 
> #globalRequest|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractConnectionService.java])
> {code:java}
> if (RequestHandler.Result.Replied.equals(result) || (!wantReply)) {
>             return new AbstractIoWriteFuture(req, null) {
>                 {
>                     setValue(Boolean.TRUE);
>                 }
>             };
> }
> {code}
> 1 、Is it a Bug(set the heartbeat buffer false default)? how the sshClient 
> know the server is available when the server don't response.
> I have test it whth create a client with params (
> HEARTBEAT_INTERAL = 60
> IDLE_TIMEOUT = 300
> NIO_READ_TIMEOUT = 315)and a server, and the client will close seesion after 
> the NIO_READ_TIMEOUT.
> 2、If the client reach the NIO_READ_TIMEOUT, then thows a 
> {color:#8eb021}InterruptedByTimeoutException{color},and close the session.But 
> the task of heratbeat not stoped, it will continue to run even though it will 
> not send packet.See the 
> [ClientConnectionService 
> #startHeartBeat|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientConnectionService.java]
> {code:java}
> service.scheduleAtFixedRate(this::sendHeartBeat, interval, interval, 
> TimeUnit.MILLISECONDS);
> {code}
> if the sshClient reopen a new session and close it many times,the number of 
> invalid scheduling heartbeat  task will become very large, it's not  
> equitable.
>          



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to