java - Why does setting SO_TIMEOUT cause final read of SocketInputStream to return immediately? -
i'm working on test harness writes bytes on socket server , reads response. had problem last read of socket's inputstream pause 20 seconds. fixed that, don't understand why worked.
the following method given java.net.socketinputstream. call read(byte[], int, int) pausing 20 seconds on final read, 1 returns -1, indicating end-of-stream.
private string getresponse(inputstream in) throws ioexception { stringbuffer buffer = new stringbuffer(); bytearrayoutputstream bout = new bytearrayoutputstream(); byte[] data = new byte[1024]; int bytesread = 0; while (bytesread >= 0) { bytesread = in.read(data, 0, 1024); // paused here on last read if (bytesread > 0) { bout.write(data, 0, bytesread); } buffer.append(new string(data)); } return buffer.tostring(); }
i able make pause go away setting so_timeout on socket. doesn't seem matter set to. socket.setsotimeout(60000), problem read in method above returns @ end-of-stream.
what's happening here? why setting so_timeout, high value, cause final read on socketinputstream return immediately?
this sounds implausible. setting socket timeout shouldn't have effect.
i think explanation changed else, , that has fixed pauses. (if guess, server closing socket wasn't doing before.)
if doesn't help, need provide sscce other people can run observe effect. , tell platform using.
Comments
Post a Comment