James Server
  1. James Server
  2. JAMES-283

James should use default backLog value when creating a ServerSocket

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.2.0
    • Fix Version/s: 2.2.0
    • Component/s: James Core
    • Labels:
      None

      Description

      We have a test where we send 100 messages simultaneously. James does not handle this well. With a standard setup 40-70 messages are NOT handled. After tweaking the config file (allocating more threads and connections) still 10-30 messages are not picked up.

      We discovered that James specifies a very tight 'backLog' value when creating a ServerSocket. This happens in org.apache.james.core.AbstractJamesService.initialize() on line 302:

      ServerSocket serverSocket = factory.createServerSocket(port, 5, bindTo);

      (Sorry no time to do a proper diff)

      We suppose that eventually a java.net.ServerSocket is created with this value. According to the javadoc of ServerSocket, the default value is 50. This can be specified by setting the backLog parameter to 0. See http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html

      We changed the above line in AbstractJamesService to

      ServerSocket serverSocket = factory.createServerSocket(port, 0, bindTo);

      With this fix all 100 messages are accepted (on Windows 2000 Server).

      We advise that James uses the default value for the backLog parameter. If there is a special reason why the default value should be 5, please make it a parameter we can specify in the config file.

      Thanks

      Hes.

      1. backlog-patch.txt
        2 kB
        Noel J. Bergman

        Activity

          People

          • Assignee:
            Noel J. Bergman
            Reporter:
            Hes Siemelink
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development