mina-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Julien Vermillard (JIRA)" <j...@apache.org>
Subject [jira] Closed: (DIRMINA-561) Socket.setReceiveBufferSize() called after bind preventing correct TCP receive window scaling
Date Fri, 27 Jun 2008 09:23:45 GMT

     [ 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.


Mime
View raw message