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

James should use default backLog value when creating a ServerSocket

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.2.0
    • 2.2.0
    • James Core
    • 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

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

            Dates

              Created:
              Updated:
              Resolved: