Description
When the telnet client is used without allowing it to create it's own reader thread (i.e. setReaderThread(false)) then the TelnetInputStream.available() method will always return 0 bytes available. This makes non-blocking IO impossible as you need to actualy call read to get the data without knowing if it will block or not.
This fix to the available method in org.apache.commons.net.telnet.TelnetInputStream, seems to fix the issue, and should work for reader threads as well:
@Override public int available() throws IOException { // Critical section because run() may change __bytesAvailable synchronized (__queue) { if (__bytesAvailable == 0 && !__threaded) { return super.available(); } else { return __bytesAvailable; } } }