I am new to MINA, and have not been able to sort out an issue that I have encountered by reading the documentation or FAQ.

My application is a UDP based server process, using a NioDatagramAcceptor, which maintains some information about all clients on the network. Anytime that a client sends a registration message to the server, the server maintains the IP address and Port of the client which may be used later for contact from the server.

I first implemented the server UDP service using the 2.0_M2 stream, but noticed an exception that would happen in certain situations. All requests that either required no response or only a response to the calling client worked fine. If a call to a client other than the initiator was made, I would sometimes receive an exception like the following. This does not happen all the time, but when it starts it is terminal. It seems to happen in the case that the the IoSession of the non-initiator client (the client not doing the actual call to the server) has not been used for a long period of time. This could be due to the "non-initiator" client not connecting for a long period of time, or having been shutdown.

java.net.SocketException: Operation not permitted
at sun.nio.ch.DatagramChannelImpl.send0(Native Method)
at sun .nio .ch.DatagramChannelImpl.sendFromNativeBuffer(DatagramChannelImpl.java: 301)
at sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:281)
at sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:250)
at org .apache .mina .transport .socket.nio.NioDatagramAcceptor.send(NioDatagramAcceptor.java:184) at org .apache .mina .transport .socket.nio.NioDatagramAcceptor.send(NioDatagramAcceptor.java:46) at org .apache .mina .core .polling .AbstractPollingConnectionlessIoAcceptor .flush(AbstractPollingConnectionlessIoAcceptor.java:468) at org .apache .mina .core .polling .AbstractPollingConnectionlessIoAcceptor .flushSessions(AbstractPollingConnectionlessIoAcceptor.java:422) at org .apache .mina.core.polling.AbstractPollingConnectionlessIoAcceptor.access $700(AbstractPollingConnectionlessIoAcceptor.java:57) at org.apache.mina.core.polling.AbstractPollingConnectionlessIoAcceptor $Worker.run(AbstractPollingConnectionlessIoAcceptor.java:336) at org .apache .mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51) at java.util.concurrent.ThreadPoolExecutor $Worker.runTask(ThreadPoolExecutor.java:885) at java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)

I have subsequently tried various solutions in hopes that I would be able to fix this, but so far I have not been able to rid myself of the issue. Specifically I have made changes to:

-Back ported the application to MINA 1.1.7
-Set the session idle to 0 (Which I believe means never notify of idle)
-Maintain a permanent reference to an IoSession for a client, and only close in the case that the exception happens -Pass the message being sent to the non-initiator client to a separate thread to be processed later, outside of the "messageReceived" context.

Should I be able to use another IoSession to another client in the midst of a "messageReceived" context? It works some of the time so this leads me rightly or wrongly to believe I am not to far off base.

What specific areas should I be looking at for problems? Should this be logged as a problem report to Mina?

As a possible note of interest is that there was an unexplained power reset that our hosting site could not give any information about, but makes me wonder about either the quality of the hosting sites power conditioning, or possibly the hardware itself. Probably not an issue, but wanted to include for completeness.

Thanks in advance for any help you can give.

Rob

Hardware: Dell 2 X Intel Xeon 2.8 GHz
OS:     Red Hat Enterprise Linux - 5.x
Container: Eclipse Equinox OSGi
Java: J2SE (build 1.6.0_06-b02)

Reply via email to