Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #38967

server-side Socket does not recognize broken connection.

Path csiph.com!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail
From Andreas Leitgeb <avl@logic.at>
Newsgroups comp.lang.java.programmer
Subject server-side Socket does not recognize broken connection.
Date Wed, 29 May 2019 11:03:18 -0000 (UTC)
Organization A noiseless patient Spider
Lines 53
Message-ID <slrnqespnm.cfl.avl@logic.at> (permalink)
Reply-To avl@logic.at
Injection-Date Wed, 29 May 2019 11:03:18 -0000 (UTC)
Injection-Info reader02.eternal-september.org; posting-host="4026fc8d5191aa509b45c747fc04e2b7"; logging-data="2817"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18HfLqQuw+Wxtlpb6vff7pz"
User-Agent slrn/1.0.3 (Linux)
Cancel-Lock sha1:U3B+2pEOgDdNuLr2eOXM1jW45bs=
Xref csiph.com comp.lang.java.programmer:38967

Show key headers only | View raw


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 | NextNext in thread | Find similar | Unroll thread


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