Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #38975
| Newsgroups | comp.lang.java.programmer |
|---|---|
| Date | 2019-05-31 20:13 -0700 |
| References | <slrnqespnm.cfl.avl@logic.at> |
| Message-ID | <92ecf367-9f62-4d72-84cf-c9308005ff3c@googlegroups.com> (permalink) |
| Subject | Re: server-side Socket does not recognize broken connection. |
| From | trisha guillot <guillottrisha347@gmail.com> |
On Wednesday, May 29, 2019 at 4:03:29 AM UTC-7, Andreas Leitgeb wrote:
> I have a ServerSocket on some port. whenever ".accept()" returns a
> connection, it goes to a loop that (among doing other stuff) polls
> the socket's input stream's ".available()" and if it returns > 0
> it reads and processes that data. (SSCCE at end of post)
>
> A client (e.g. using plain old "telnet" on unix) connects, types a
> bit, then breaks the connection using Ctrl-] and "close", and is back
> on the shell. (closing the terminal window that's running telnet
> has same effect, ditto killing the telnet process - apparently
> whatever breaks, or even properly shuts down the connection from
> client side.)
>
> The Socket on server side, however keeps reporting 0 on .available(),
> rather than throwing some exception for the broken socket.
>
> Single stepping the .available() method (class AbstractPlainSocketImpl)
> shows that it just never receives the ConnectionResetException, and thus
> won't ever get to throw new IOException("Stream closed.") itself.
> Field resetState never changes away from CONNECTION_NOT_RESET.
>
> What am I doing wrong wrt. EOF-detection in ".available()" ?
>
> PS: The real code does more interesting stuff while no input is available,
> so it cannot wait blockingly. The real code also has other exits from the
> loop (based on input received), but that's not relevant for this SSCCE.
>
> PS: unlike most of my recent posts, this one is *not* Java11-related.
>
>
> SSCCE: ServerTest.java
>
> import javax.net.ServerSocketFactory;
> import java.net.ServerSocket;
> import java.net.Socket;
> import java.io.InputStream;
> import java.io.IOException;
>
> public class ServerTest {
> public static void main(String[] args) throws IOException,InterruptedException {
>
> ServerSocket serverSocket = ServerSocketFactory.getDefault().createServerSocket(65432);
> Socket clientSocket = serverSocket.accept();
> InputStream is = clientSocket.getInputStream();
>
> while (true) {
> if (is.available() > 0) {
> System.out.println( is.read() );
> }
> Thread.sleep(100);
> }
> }
> }
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
server-side Socket does not recognize broken connection. Andreas Leitgeb <avl@logic.at> - 2019-05-29 11:03 +0000
Re: server-side Socket does not recognize broken connection. Eric Sosman <esosman@comcast-dot-net.invalid> - 2019-05-29 08:30 -0400
Re: server-side Socket does not recognize broken connection. Joerg Meier <joergmmeier@arcor.de> - 2019-05-29 14:58 +0200
Re: server-side Socket does not recognize broken connection. Andreas Leitgeb <avl@logic.at> - 2019-05-29 14:50 +0000
Re: server-side Socket does not recognize broken connection. Eric Douglas <e.d.programmer@gmail.com> - 2019-05-29 08:22 -0700
Re: server-side Socket does not recognize broken connection. Andreas Leitgeb <avl@logic.at> - 2020-01-30 15:22 +0000
Re: server-side Socket does not recognize broken connection. Martin Gregorie <martin@mydomain.invalid> - 2019-05-29 16:06 +0000
Re: server-side Socket does not recognize broken connection. Eric Douglas <e.d.programmer@gmail.com> - 2019-05-29 07:14 -0700
Re: server-side Socket does not recognize broken connection. trisha guillot <guillottrisha347@gmail.com> - 2019-05-31 20:13 -0700
Re: server-side Socket does not recognize broken connection. Marcel Mueller <news.5.maazl@spamgourmet.org> - 2019-06-01 16:08 +0200
csiph-web