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