title: Gradle: MessageIOException: Could not write message [EndOfStream] to 127.0.0.1 (Firewall)?
body: <p>I wrote a simple test project, which opens port <code>9123</code> for some time and exit:</p>
  
  <pre><code>import java.io.IOException;
  import java.net.InetSocketAddress;
  import java.nio.charset.Charset;
  import java.util.Date;
  
  import org.apache.mina.core.service.IoAcceptor;
  import org.apache.mina.core.service.IoHandler;
  import org.apache.mina.core.service.IoHandlerAdapter;
  import org.apache.mina.core.session.IdleStatus;
  import org.apache.mina.core.session.IoSession;
  import org.apache.mina.filter.codec.ProtocolCodecFilter;
  import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
  import org.apache.mina.filter.logging.LoggingFilter;
  import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
  public class TimeServer
  {
      private static final int PORT = 9123;
      public static void main( String[] args ) throws IOException
      {
          IoAcceptor acceptor = new NioSocketAcceptor();
          acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
          acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
          acceptor.setHandler( new TimeServerHandler() );
          acceptor.getSessionConfig().setReadBufferSize( 2048 );
          acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
          acceptor.bind( new InetSocketAddress(PORT) );
      }
  
      private static class TimeServerHandler extends IoHandlerAdapter {
          @Override
          public void exceptionCaught(IoSession session, Throwable cause ) throws Exception
          {
              cause.printStackTrace();
          }
          @Override
          public void messageReceived( IoSession session, Object message ) throws Exception
          {
              String str = message.toString();
              if( str.trim().equalsIgnoreCase("quit") ) {
                  session.close();
                  return;
              }
              Date date = new Date();
              session.write( date.toString() );
              System.out.println("Message written...");
          }
          @Override
          public void sessionIdle( IoSession session, IdleStatus status ) throws Exception
          {
              System.out.println( "IDLE " + session.getIdleCount( status ));
          }
      }
  }
  </code></pre>
  
  <p>...</p>
  
  <pre><code>import java.io.IOException;
  
  public class TimeServerTest {
  
  
     @Test
     public void runningTimeServerForTime() throws IOException, InterruptedException {
  
        int period = 15000;
  
        System.out.println("Running time server for " + period + "ms");
  
        TimeServer.main(new String[] {});
  
        Thread.sleep(period);
  
        System.out.println("Done, exiting");
  
        System.exit(0);
  
     }
  }
  </code></pre>
  
  <p>This test runs Ok under IntelliJ and when Windows firewall is Off.</p>
  
  <p>When windows firewall is On, it fails with exception</p>
  
  <pre><code>&gt;gradle test
  :compileJava
  Note: PATH\TimeServer.java uses or overrides a deprecated API.
  Note: Recompile with -Xlint:deprecation for details.
  :processResources UP-TO-DATE
  :classes
  :compileTestJava
  :processTestResources UP-TO-DATE
  :testClasses
  :test
  Unexpected exception thrown.
  org.gradle.messaging.remote.internal.MessageIOException: Could not write message [EndOfStream] to '/127.0.0.1:58895'.
          at org.gradle.messaging.remote.internal.inet.SocketConnection.dispatch(SocketConnection.java:111)
          at org.gradle.messaging.remote.internal.hub.MessageHub$ConnectionDispatch.run(MessageHub.java:284)
          at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
          at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
          at java.lang.Thread.run(Thread.java:745)
  Caused by: java.io.IOException: An existing connection was forcibly closed by the remote host
          at sun.nio.ch.SocketDispatcher.write0(Native Method)
          at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51)
          at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
          at sun.nio.ch.IOUtil.write(IOUtil.java:51)
          at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)
          at org.gradle.messaging.remote.internal.inet.SocketConnection$SocketOutputStream.flush(SocketConnection.java:236)
          at org.gradle.messaging.remote.internal.inet.SocketConnection.dispatch(SocketConnection.java:109)
          ... 6 more
  
  BUILD SUCCESSFUL
  </code></pre>
  
  <p>What is happening?</p>
  
  <p>Why the referred port <code>58895</code> is very different, than opened port <code>9123</code>?</p>
  
  <p>How to make this test run w/o disabling firewall?</p>
  
  <p>Which program to add to whitelist of windows firewall for this test runs ok?</p>