Uploaded image for project: 'James Server'
  1. James Server
  2. JAMES-283

James should use default backLog value when creating a ServerSocket

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: 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.

        Attachments

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

          Activity

            People

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

              Dates

              • Created:
                Updated:
                Resolved: