Соединение зависает во время рукопожатия DTLS - PullRequest
0 голосов
/ 24 октября 2018

У нас есть приложение, которое использует DTLS для связи с сервером (которому у нас нет источника).Связь работает нормально в течение часа или около того, но после этого поток связи зависает во время рукопожатия.Мы следовали за исходным кодом до java.net.PlainDatagramSocketImpl.receive0.Там, где мы видим время ожидания 1000 мс, отправленное из BC, но кажется, что мы до сих пор не получаем SocketTimeoutException нашего кода.

Может ли Bouncycastle съесть исключение на выходе и попытаться снова бесконечно?Или это может быть что-то еще происходит?

Stacktrace:

"pool-64-thread-14@4646" prio=5 tid=0x10e nid=NA runnable
java.lang.Thread.State: RUNNABLE
  at java.net.PlainDatagramSocketImpl.receive0(PlainDatagramSocketImpl.java:-1)
  - locked <merged>(a java.net.PlainDatagramSocketImpl)
  at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:144)
  at java.net.DatagramSocket.receive(DatagramSocket.java:812)
  - locked <merged>(a java.net.DatagramSocket)
  - locked <merged>(a java.net.DatagramPacket)
  at org.bouncycastle.tls.UDPTransport.receive(Unknown Source:-1)
  at org.bouncycastle.tls.DTLSRecordLayer.receiveRecord(Unknown Source:-1)
  at org.bouncycastle.tls.DTLSRecordLayer.receive(Unknown Source:-1)
  at org.bouncycastle.tls.DTLSReliableHandshake.receiveMessage(Unknown Source:-1)
  at org.bouncycastle.tls.DTLSReliableHandshake.receiveMessageBody(Unknown Source:-1)
  at org.bouncycastle.tls.DTLSClientProtocol.clientHandshake(Unknown Source:-1)
  at org.bouncycastle.tls.DTLSClientProtocol.connect(Unknown Source:-1)
  at com.x.y.z.gateway.SessionTracker.openDTLSConnection(SessionTracker.java:83)
  at com.x.y.z.gateway.SessionTracker.createTlsSession(SessionTracker.java:67)
  at com.x.y.z.gateway.SessionTracker.createGatewaySession(SessionTracker.java:49)
  at com.x.y.z.gateway.SessionTracker$$Lambda$233.13423545.get(Unknown Source:-1)
  at com.x.y.z.gateway.SessionPool.getSession(SessionPool.java:53)
  at com.x.y.z.gateway.SessionTracker.getGatewaySession(SessionTracker.java:41)
  at com.x.y.z.gateway.ZIPGatewayWrapper.getGatewaySession(ZIPGatewayWrapper.java:44)
  at com.x.y.z.gateway.NodeConnection.prepareDtlsSession(NodeConnection.java:150)
  at com.x.y.z.gateway.NodeConnection.send(NodeConnection.java:104)
  - locked <merged>(a com.x.y.z.gateway.NodeConnection)
  at com.x.y.z.gateway.NodeConnection.run(NodeConnection.java:76)
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  at java.lang.Thread.run(Thread.java:745)
...