[ 
https://issues.apache.org/jira/browse/AMQ-6599?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Christopher L. Shannon reassigned AMQ-6599:
-------------------------------------------

    Assignee: Christopher L. Shannon

> MQTT+NIO+SSL transport: transport.soTimeout is not applied during SSL 
> handshake
> -------------------------------------------------------------------------------
>
>                 Key: AMQ-6599
>                 URL: https://issues.apache.org/jira/browse/AMQ-6599
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Transport
>    Affects Versions: 5.14.3
>         Environment: Ubuntu 16.04
> openjdk version "1.8.0_121"
> OpenJDK Runtime Environment (build 1.8.0_121-8u121-b13-0ubuntu1.16.04.2-b13)
> OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
>            Reporter: Thomas Winterhalder
>            Assignee: Christopher L. Shannon
>
> Currently I have trouble with many established TCP connections and threads 
> hanging in the NIO+SSL handshake step. The hardware devices I use often have 
> problems during SSL handshake and do not respond any more. So I thought 
> configuring a transport.soTimeout value should solve the problem of hanging 
> connections, because something like the MQTT  transport.defaultKeepAlive 
> check is not applicable in this step yet. But setting 
> transport.soTimeout=30000 had no effect.
> I made a remote debug session to the ActiveMQ broker and saw lots of threads 
> waiting at NIOSSLTransport.java Line 430:
>     int keyCount = selector.select(this.getSoTimeout());
>     if (keyCount == 0 && this.getSoTimeout() > 0 && 
> ((System.currentTimeMillis() - now) >= this.getSoTimeout())) {
>         throw new SocketTimeoutException("Timeout during handshake");
>     }
> At this point this.getSoTimeout returns always 0, which results in infinite 
> timeout.
> I tried to figure out why the soTimeout setting works not as configured and 
> found the code where the NIOSSLTransport object is created: 
> TcpTransportServer.java function doHandleSocket(Socket socket). Here in line 
> 580:
>     options.putAll(transportOptions);
> The soTimeout value is already removed from the transportOptions but it was 
> apperantly not applied to the relevant object.
> To solve my problem for now I tried if the transport.soTimeout configuration 
> works in a MQTT+SSL Stack (without using NIO) and it worked.
> May you please be so kind and solve this issue, so that the 
> transport.soTimeout configurations works during SSL handshake and payload 
> transfer as well for NIO.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to