commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Age Bosma (JIRA)" <j...@apache.org>
Subject [jira] Created: (NET-350) "java.net.SocketException: Broken pipe" when calling "TelnetClient.sendAYT()"
Date Sun, 16 Jan 2011 16:44:45 GMT
"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


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.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message