title: ServerSocket - Is it really necessary to close() it?
body: <p>I have this damnable structure:</p>
  
  <pre><code>public void run() {
  
          try {
              if (!portField.getText().equals("")) {              
                  String p = portField.getText();
                  CharSequence numbers = "0123456789";
  
              btnRun.setEnabled(false);
  
              if (p.contains(numbers)) {
                  ServerSocket listener = new ServerSocket(Integer.parseInt(p));
  
                  while (true) {
                      Socket socket = listener.accept();
                      try {
                          PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                          out.println("Hi there, human.");    
                      } finally {
                          socket.close(); 
                      }
                  }} else {
                      JOptionPane.showMessageDialog(null, "Only numbers are allowed.");
                  }
              }
  
          } catch (NumberFormatException | HeadlessException | IOException e) {
              e.printStackTrace();
          } 
      }
  </code></pre>
  
  <p>As you can see, I need to close the listener exactly as I did with the socket. The problem is that if I try to do so after the loop the code will be "unreachable", and if I try to declare a field anywhere for the ServerSocket, I get a NullPointerException. I don't want to close the ServerSocket together with the socket/client because I want to make new connections. </p>
  
  <p>So that's my question:</p>
  
  <p>It's REALLY necessary to close the ServerSocket in this case? The ServerSocket closes itself by its own when the software is shut down? <em>(System.exit(0))</em>. If the ServerSocket continues to run when I close the software just because I have not closed it, then I have a problem, because I can't reach that bloody piece of code to close it :).</p>