You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Christopher L. Shannon (JIRA)" <ji...@apache.org> on 2017/02/17 13:07:41 UTC

[jira] [Resolved] (AMQ-6599) MQTT+NIO+SSL transport: transport.soTimeout is not applied during SSL handshake

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

Christopher L. Shannon resolved AMQ-6599.
-----------------------------------------
       Resolution: Fixed
    Fix Version/s: 5.14.4
                   5.15.0

> 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
>             Fix For: 5.15.0, 5.14.4
>
>
> 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)