Return-Path: Delivered-To: apmail-mina-dev-archive@www.apache.org Received: (qmail 58413 invoked from network); 27 Jun 2008 09:24:42 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 27 Jun 2008 09:24:42 -0000 Received: (qmail 25185 invoked by uid 500); 27 Jun 2008 09:24:37 -0000 Delivered-To: apmail-mina-dev-archive@mina.apache.org Received: (qmail 25134 invoked by uid 500); 27 Jun 2008 09:24:37 -0000 Mailing-List: contact dev-help@mina.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@mina.apache.org Delivered-To: mailing list dev@mina.apache.org Received: (qmail 25078 invoked by uid 99); 27 Jun 2008 09:24:37 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 27 Jun 2008 02:24:37 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.140] (HELO brutus.apache.org) (140.211.11.140) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 27 Jun 2008 09:23:55 +0000 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 42D16234C15D for ; Fri, 27 Jun 2008 02:23:45 -0700 (PDT) Message-ID: <131044772.1214558625272.JavaMail.jira@brutus> Date: Fri, 27 Jun 2008 02:23:45 -0700 (PDT) From: "Julien Vermillard (JIRA)" To: dev@mina.apache.org Subject: [jira] Closed: (DIRMINA-561) Socket.setReceiveBufferSize() called after bind preventing correct TCP receive window scaling In-Reply-To: <1413257901.1206733104986.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/DIRMINA-561?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Julien Vermillard closed DIRMINA-561. ------------------------------------- > Socket.setReceiveBufferSize() called after bind preventing correct TCP receive window scaling > --------------------------------------------------------------------------------------------- > > Key: DIRMINA-561 > URL: https://issues.apache.org/jira/browse/DIRMINA-561 > Project: MINA > Issue Type: Bug > Components: Transport > Affects Versions: 1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.1.0, 1.0.4, 1.1.1, 1.0.5, 1.1.2, 1.0.6, 1.1.3, 1.0.7, 1.1.4, 1.0.8, 1.1.5, 1.0.9, 1.1.6, 2.0.0-M1 > Environment: Head of the 1.1 branch > Reporter: Greg Dhuse > Assignee: Trustin Lee > Fix For: 1.0.10, 1.1.7, 2.0.0-M2 > > Original Estimate: 0h > Remaining Estimate: 0h > > Socket.setReceiveBufferSize() must be called before bind() on a ServerSocket in order to allow TCP receive window scaling up to the configured buffer size (http://java.sun.com/j2se/1.5.0/docs/api/java/net/Socket.html#setReceiveBufferSize(int)). Currently, socket options are set after bind() is called. This results in the correct Java receive buffer size, but does not allow the TCP stack to scale receive windows above 64k. Severe performance degradation can occur on high-latency high-bandwidth connections. > The following patch is a possible solution to this issue, though there may be a cleaner way to implement a fix within the framework. > Best regards, > Greg > Index: core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java > =================================================================== > --- core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java (revision 642333) > +++ core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java (working copy) > @@ -163,6 +163,16 @@ > try { > ch = SocketChannel.open(); > ch.socket().setReuseAddress(true); > + > + // Receive buffer size must be set BEFORE the socket is connected > + // in order for the TCP window to be sized accordingly > + if (config instanceof SocketConnectorConfig) { > + SocketSessionConfig sessionConfig = > + ((SocketConnectorConfig) config).getSessionConfig(); > + ch.socket().setReceiveBufferSize( > + sessionConfig.getReceiveBufferSize()); > + } > + > if (localAddress != null) { > ch.socket().bind(localAddress); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.