I have developed a TcpMinaClient which establishes a session to a remote server
with the below configurations:
KeepAlive =true
ReuseAddress=true
SoLinger=0
TcpNoDelay=true.

Once the session is established I send a login request, which if correct works
perfectly fine, but when the login credentials are incorrect the server:
1) sends a login rejected message and
2) close the existing connection. 
Now, the issue I am facing is that I can read the login rejected message
sporadically. For 10 runs I recieve it only 5-6 times the other times session
gets closed before I could read the reject message and know the reason.

Effectively the exceptionCaught() in my IoSessionHandler gets called before I
can read the message  with stacktrace as:
SessionHandler - exception caught
java.io.IOException: Connection reset by peer
        at sun.nio.ch.FileDispatcher.read0(Native Method)
        at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:21)
        at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:237)
        at sun.nio.ch.IOUtil.read(IOUtil.java:210)
        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:236)
        at 
org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:280)
        at 
org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:44)
        at
org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIo
Processor.java:695)
        at
org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPolling
IoProcessor.java:668)
        at
org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPolling
IoProcessor.java:657)
        at
org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPoll
ingIoProcessor.java:68)
        at
org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(Abstract
PollingIoProcessor.java:1141)
        at 
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.
        java:64)        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.
java:886)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.
        java:908)       at java.lang.Thread.run(Thread.java:619)












and by the time I try to read the message from the session its already closed
and while trying to read I get an exception: 
org.apache.mina.core.RuntimeIoException: java.io.IOException: Connection reset
by peer
        at
org.apache.mina.core.future.DefaultReadFuture.getMessage(DefaultReadFuture
.java:60)
        at
com.rbs.***.***.connector.****TcpMinaConnection.login(***TcpMinaConnection.
java:187)
        at
com.rbs.***.***.connector.***TcpMinaConnection.connect(***TcpMinaConnection.
java:124)
        at
com.rbs.***.connector.GenericConnectionManager.connect(GenericConnectionManager
.java:66)
        at 
com.rbs.***.implementation.MDLHCoreEngine.start(MDLHCoreEngine.java:55)
        at
com.rbs.***.utils.Start***LineHandler.connectToExchange(Start***LineHandler.
java:46)
        at
com.rbs.***.***.implementation.Start******Handler.main(Start******Handler.
java:60)
Caused by: java.io.IOException: Connection reset by peer
        at sun.nio.ch.FileDispatcher.read0(Native Method)
        at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:21)
        at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:237)
        at sun.nio.ch.IOUtil.read(IOUtil.java:210)
        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:236)
        at 
org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:
        280     )
        at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.
        java:44)at
org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIo
Processor.java:695)
        at
org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPolling
IoProcessor.java:668)
        at
org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPolling
IoProcessor.java:657)
        at
org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPoll
ingIoProcessor.java:68)
        at
org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(Abstract
PollingIoProcessor.java:1141)
        at 
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.
        java:64)        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.
java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
        .java:908)      at java.lang.Thread.run(Thread.java:619)


Is this issue known or am I doing something wrong. 
or Is there any configuration in MINA which would let me wait for the data from
the connection to be read before the session gets closed.

        


Reply via email to