You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Sebb (JIRA)" <ji...@apache.org> on 2011/03/10 03:31:59 UTC
[jira] Resolved: (NET-350) "java.net.SocketException: Broken pipe"
when calling "TelnetClient.sendAYT()"
[ https://issues.apache.org/jira/browse/NET-350?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sebb resolved NET-350.
----------------------
Resolution: Fixed
Fix Version/s: 3.0
Thanks for the patch.
It seemed wrong to change the existing isConnected() method, so the checks were added as a new isAvailable() method.
> "java.net.SocketException: Broken pipe" when calling "TelnetClient.sendAYT()"
> -----------------------------------------------------------------------------
>
> Key: NET-350
> URL: https://issues.apache.org/jira/browse/NET-350
> Project: Commons Net
> Issue Type: Bug
> Components: Telnet
> Affects Versions: 2.2
> Environment: Ubuntu 10.10 (x32)
> Java JDK 1.6.0.22
> Reporter: Age Bosma
> Fix For: 3.0
>
> Attachments: sockclient-isconn.diff
>
>
> I'm trying to write some code to have a reliable way to determine if a telnet connection is still available and not closed on the remote server. Even though I first call TelnetClient.isConnected(), the followed TelnetClient.sendAYT() gives me SocketException. The problem occurs when I provide invalid login credentials on purpose when logging in to the telnet server.
> Code snippet:
> {code:java}
> private boolean isConnected() {
> return isConnected(100);
> }
> private boolean isConnected(int timeOut) {
> boolean connected = false;
> if (telnetClient.isConnected()) {
> try {
> connected = telnetClient.sendAYT(timeOut);
> } catch (IOException ex) {
> Logger.getLogger(ForceLogin.class.getName()).log(Level.SEVERE, null, ex);
> } catch (IllegalArgumentException ex) {
> Logger.getLogger(ForceLogin.class.getName()).log(Level.SEVERE, null, ex);
> } catch (InterruptedException ex) {
> Logger.getLogger(ForceLogin.class.getName()).log(Level.SEVERE, null, ex);
> }
> }
>
> System.out.println("Still connected? " + connected);
> return connected;
> }
> {code}
> What I do is execute the following:
> {code:java}
> succesfulLogin = forceLogin.isConnected();
> if (succesfulLogin) {
> succesfulLogin = forceLogin.isConnected(1000);
> }
> {code}
> When I try to fail the telnet login (providing invalid credentials), the first "isConnected()" call sometimes gives me TRUE, sometimes gives me FALSE. When it's TRUE I want to make sure that we are really still connected using a longer "TelnetClient.sendAYT()" timeout. This is where the exception occurs.
> Resulting exception:
> {code:java}
> 16-Jan-2011 16:44:04 force.ForceLogin isConnected
> SEVERE: null
> java.net.SocketException: Broken pipe
> at java.net.SocketOutputStream.socketWrite0(Native Method)
> at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
> at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
> at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
> at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
> at org.apache.commons.net.telnet.Telnet._sendAYT(Telnet.java:1095)
> at org.apache.commons.net.telnet.TelnetClient.sendAYT(TelnetClient.java:206)
> at force.ForceLogin.isConnected(ForceLogin.java:95)
> at force.ForceLogin.main(ForceLogin.java:160)
> {code}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira