[prev in list] [next in list] [prev in thread] [next in thread]
List: mina-dev
Subject: [jira] [Comment Edited] (SSHD-720) SSHD does not always detect remote closure in time.
From: "Claude Warren (JIRA)" <jira () apache ! org>
Date: 2016-11-29 7:27:58
Message-ID: JIRA.13023790.1480352841000.386606.1480404478513 () Atlassian ! JIRA
[Download RAW message or body]
[ https://issues.apache.org/jira/browse/SSHD-720?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15703148#comment-15703148 \
]
Claude Warren edited comment on SSHD-720 at 11/29/16 7:27 AM:
--------------------------------------------------------------
I updated the example code to use threads as requested. However, I point out that \
the issue is on the client side code.
The point is that the server I am trying to talk to in production if paranoid. So if \
I hit it with any sort of incorrect command it shuts down the -connection- +session+. \
My example code simulates this by calling sshd.close(); The result is exactly the \
result I see in my production code.
I test to see if the session is open before calling createChannel() as shown below in \
an extract from the interactWithServer() method. {code}
if ( !session.isOpen() ) {
System.err.println( "Session invalid on "+command);
throw new SessionInvalidException();
}
System.out.println( "Sending "+command);
channel = session.createChannel(Channel.CHANNEL_EXEC, command);
{code}
I don't see any way to accurately check that the server connection still exists \
before making the call. What I have not been able to verify is that the \
session.isOpen() checks the service status. As the session says it is OK but the \
createExecChannel() fails at service.registerChannel() because the ConnectionService \
is closing.
{code}
@Override
public ChannelExec createExecChannel(String command) throws IOException {
ChannelExec channel = new ChannelExec(command);
ConnectionService service = getConnectionService();
int id = service.registerChannel(channel);
if (log.isDebugEnabled()) {
log.debug("createExecChannel({})[{}] created id={}", this, command, id);
}
return channel;
}
{code}
By way of a qualification for {{not always}} it means that the example code will \
sometimes detect that the server has gone away, however the code usually fails as \
expected.
In short, what I am looking for is a way to detect that the remote server has gone \
away before I call session.createChannel().
I will go back and review the example code to see where else I have made errors. \
However, I believe that I found the run the command directly from start in one of the \
examples. If I find that I will point it out. I would hasten to point out that the \
test code ran and failed as expected on 2 different systems, so while it may be \
poorly coded it fails. Thank you for taking the time to look at this report.
was (Author: claudenw):
I updated the example code to use threads as requested. However, I point out that \
the issue is on the client side code.
The point is that the server I am trying to talk to in production if paranoid. So if \
I hit it with any sort of incorrect command it shuts down the connection. My example \
code simulates this by calling sshd.close(); The result is exactly the result I see \
in my production code.
I test to see if the session is open before calling createChannel() as shown below in \
an extract from the interactWithServer() method. {code}
if ( !session.isOpen() ) {
System.err.println( "Session invalid on "+command);
throw new SessionInvalidException();
}
System.out.println( "Sending "+command);
channel = session.createChannel(Channel.CHANNEL_EXEC, command);
{code}
I don't see any way to accurately check that the server connection still exists \
before making the call. What I have not been able to verify is that the \
session.isOpen() checks the service status. As the session says it is OK but the \
createExecChannel() fails at service.registerChannel() because the ConnectionService \
is closing.
{code}
@Override
public ChannelExec createExecChannel(String command) throws IOException {
ChannelExec channel = new ChannelExec(command);
ConnectionService service = getConnectionService();
int id = service.registerChannel(channel);
if (log.isDebugEnabled()) {
log.debug("createExecChannel({})[{}] created id={}", this, command, id);
}
return channel;
}
{code}
By way of a qualification for {{not always}} it means that the example code will \
sometimes detect that the server has gone away, however the code usually fails as \
expected.
In short, what I am looking for is a way to detect that the remote server has gone \
away before I call session.createChannel().
I will go back and review the example code to see where else I have made errors. \
However, I believe that I found the run the command directly from start in one of the \
examples. If I find that I will point it out. I would hasten to point out that the \
test code ran and failed as expected on 2 different systems, so while it may be \
poorly coded it fails. Thank you for taking the time to look at this report.
> SSHD does not always detect remote closure in time.
> ---------------------------------------------------
>
> Key: SSHD-720
> URL: https://issues.apache.org/jira/browse/SSHD-720
> Project: MINA SSHD
> Issue Type: Bug
> Affects Versions: 1.4.0
> Reporter: Claude Warren
> Priority: Minor
> Attachments: CommsTest2.java, CommsTest2a.java
>
>
> I am attempting to use a device that will close the connection if there are any \
> invalid commands. The client side does not detect this condition and I don't see \
> any way to check for it. Example code is attached
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic