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

Multiple DatagramAcceptors and the creation of a session object

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.1.5
    • 2.2.3, 2.0.25, 2.1.8
    • Core
    • None

    Description

      Hello,

      I am using two independently created NioDatagramAcceptors, which are created by the following code :

      AbstractIoService inputSource = new NioDatagramAcceptor();
      ((NioDatagramAcceptor) inputSource).getSessionConfig().setReuseAddress(true);
      DefaultIoFilterChainBuilder filterChainBuilderUDP = ((NioDatagramAcceptor)inputSource).getFilterChain();
      filterChainBuilderUDP.addLast("logger", new LoggingFilter());
      
      ((NioDatagramAcceptor) inputSource).getSessionConfig().setIdleTime(IdleStatus.READER_IDLE, getIdleTimeout());
      ((NioDatagramAcceptor) inputSource).setHandler(this);
      try {
      	((NioDatagramAcceptor)inputSource).bind(new InetSocketAddress(port));
      } catch (IOException e) {
      	log.error("Failed to connect {}", e);
      }
      

      One Acceptor is listening on port 9800, the other one on 9801. If I now send UDP packages (from a external application) to both ports (independently). It seems, that both UDP port are "connected" to the same session.

      Information: The external app is sending:
      Message "TEST_1 <timestamp>" just to port 9800
      Message "TEST_2 <timestamp>" just to port 9801

      The overwritten method messageReceived will give the following output:

      public void messageReceived(IoSession session, Object message) throws Exception {
      	String msgStr = message.toString();
      	log.info("SessionId:" + session.getId() + " " + msgStr);
      }
      

      2023-04-19_11:47:35.035 [NioDatagramAcceptor-2] INFO - SessionId:1 TEST_1 1681904855701
      2023-04-19_11:47:35.035 [NioDatagramAcceptor-3] INFO - SessionId:1 TEST_2 1681904855701

      So, both messages (for port 9800 and port 9801) are received by SessionId1. If I do exactly the same with `NioSocketConnector`, I can see two different sessions, such that both messages are handled independently:

      2023-04-19_11:44:35.725 [NioProcessor-11] INFO - SessionId:1 TEST_1 1681904875701
      2023-04-19_11:44:37.754 [NioProcessor-15] INFO - SessionId:2 TEST_2 1681904875701

      Is there anything I did not mention in the context of UDP/DatagramAcceptor? Or is there any setting, such that DatagramAcceptors can create/handle their own session objects?

      Attachments

        1. mina-core-2.2.3-SNAPSHOT.jar
          663 kB
          Emmanuel Lécharny
        2. apache-mina-2.2.3-SNAPSHOT-bin.tar.gz
          5.12 MB
          Emmanuel Lécharny
        3. DIRMINA1172.java
          4 kB
          Emmanuel Lécharny
        4. UDPTest4.java
          1 kB
          Alexander B

        Issue Links

          Activity

            People

              Unassigned Unassigned
              abuechel Alexander B
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: