I have a TCP socket connection which works well on Android 2.3 but now facing some problems on Android 4.1. The problem is that InputStream.read() method always returns -1 (without blocking), like the connection is closed.

Creating socket:

SocketFactory socketFactory = SocketFactory.getDefault();
Socket socket = socketFactory.createSocket("c.whatsapp.net", 5222);
socket.setSoTimeout(3*60*1000);
socket.setTcpNoDelay(true);

Retrieving input and output streams and writing some initial data:

InputStream inputStream = new BufferedInputStream(socket.getInputStream());
OutputStream outputStream = new BufferedOutputStream(socket.getOutputStream());

outputStream.write(87);
outputStream.write(65);
outputStream.write(1);
outputStream.write(2);
outputStream.flush();

Then, this condition always passes without blocking:

int c = inputStream.read();
if (c < 0) {
    Log.d(TAG, "End of stream");
}

This code is running in a background thread. And it was working on Gingerbread.

Tried to use InputStreamReader and OutputStreamWriter instead of direct streams - no effect.

Edit
Report