Uploaded image for project: 'MINA'
  1. MINA
  2. DIRMINA-200

IBM iSeries throws unexpected SocketException

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Blocker
    • Resolution: Fixed
    • 0.9.3, 0.9.4
    • 0.9.5
    • None
    • None
    • mina-0.9.3 JDK 1.4.2 IBM iSeries OS/400 V5R2

    Description

      Proposal of a change to nio SocketSessionImpl.

      I'd like the calls to:

      getTrafficClass
      setTrafficClass
      setSendBufferSize
      setReceiveBufferSize

      to not throw RuntimeIOException when a SocketException is caught.

      My reasoning is based on the Socket class javadoc:

      E.g. setTrafficClass

      "As the underlying network implementation may ignore this value applications should consider it a hint."

      and

      "Setting bits in the precedence field may result in a SocketException indicating that the operation is not permitted."

      The other getter/setter method javadoc also refer to 'hints' and a 'if there is an error obtaining' condition.

      Some operating systems (OS/400 in my case ), do not allow the trafficClass value to be read or written. I think this may also be the case as reported here on Linux:

      http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4709474

      By ignoring the SocketException thrown by these methods (perhaps issuing a log4j WARN instead? Or hooking up with an appropriate monitor?), socket sessions can be established without error on an IBM iSeries.

      Example stack trace:

      2006-04-03 17:26:26,343 WARN [org.apache.mina.common.support.DefaultExceptionMonitor](SocketAcceptor-0) Unexpected exception.
      org.apache.mina.common.RuntimeIOException: java.net.SocketException
      at java.lang.Throwable.<init>(Throwable.java:240)
      at java.lang.Exception.<init>(Exception.java:77)
      at java.lang.RuntimeException.<init>(RuntimeException.java:77)
      at org.apache.mina.common.RuntimeIOException.<init>(RuntimeIOException.java:48)
      at org.apache.mina.transport.socket.nio.support.SocketSessionImpl$SocketSessionConfigImpl.setTrafficClass(SocketSessionImpl.java:342)
      at org.apache.mina.transport.socket.nio.support.SocketSessionImpl.<init>(SocketSessionImpl.java:71)
      at org.apache.mina.transport.socket.nio.support.SocketAcceptorDelegate$Worker.processSessions(SocketAcceptorDelegate.java:379)
      at org.apache.mina.transport.socket.nio.support.SocketAcceptorDelegate$Worker.run(SocketAcceptorDelegate.java:326)
      Caused by: java.net.SocketException
      at java.lang.Throwable.<init>(Throwable.java:180)
      at java.lang.Exception.<init>(Exception.java:29)
      at java.io.IOException.<init>(IOException.java:28)
      at java.net.SocketException.<init>(SocketException.java:35)
      at sun.nio.ch.Net.setIntOption(Net.java:156)
      at sun.nio.ch.SocketChannelImpl$1.setInt(SocketChannelImpl.java:398)
      at sun.nio.ch.SocketOptsImpl.setInt(SocketOptsImpl.java:46)
      at sun.nio.ch.SocketOptsImpl$IP.typeOfService(SocketOptsImpl.java:249)
      at sun.nio.ch.OptionAdaptor.setTrafficClass(OptionAdaptor.java:158)
      at sun.nio.ch.SocketAdaptor.setTrafficClass(SocketAdaptor.java:320)
      ... 4 more

      I have attached a proposed patch and welcome any comments.

      SimonT

      Attachments

        1. mina-ex.patch
          2 kB
          Simon Temple

        Activity

          People

            trustin Trustin Lee
            simont Simon Temple
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: