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

Reply via email to