do not exit accept loop on I2PExceptions, GitHub issue #123

dbus-notify
Zlatin Balevsky 2022-03-05 14:50:22 +00:00
parent 9e8d6fe013
commit 75f65a61ca
No known key found for this signature in database
GPG Key ID: A72832072D525E41
2 changed files with 19 additions and 17 deletions

View File

@ -120,16 +120,7 @@ class ConnectionAcceptor {
private void acceptLoop() {
try {
while(true) {
def incoming
try {
incoming = acceptor.accept()
} catch (I2PException|ConnectException i2PException) {
if (shutdown)
throw i2PException
log.log(Level.WARNING, "I2P exception, maybe router disconnected?", i2PException)
Thread.sleep(10)
continue
}
def incoming = acceptor.accept()
log.info("accepted connection from ${incoming.destination.toBase32()}")
switch(trustService.getLevel(incoming.destination)) {
case TrustLevel.TRUSTED : break

View File

@ -2,15 +2,19 @@ package com.muwire.core.connection
import com.muwire.core.RouterConnectedEvent
import com.muwire.core.RouterDisconnectedEvent
import groovy.util.logging.Log
import net.i2p.I2PException
import net.i2p.client.streaming.I2PServerSocket
import net.i2p.client.streaming.I2PSocketManager
import java.util.function.Supplier
import java.util.logging.Level
@Log
class I2PAcceptor {
private final Supplier<I2PSocketManager> socketManager
private I2PServerSocket serverSocket
private volatile I2PServerSocket serverSocket
I2PAcceptor() {}
@ -28,12 +32,19 @@ class I2PAcceptor {
}
Endpoint accept() {
I2PServerSocket serverSocket
synchronized (this) {
while((serverSocket = this.serverSocket) == null)
wait()
while(true) {
try {
I2PServerSocket serverSocket
synchronized (this) {
while((serverSocket = this.serverSocket) == null)
wait()
}
def socket = serverSocket.accept()
return new Endpoint(socket.getPeerDestination(), socket.getInputStream(), socket.getOutputStream(), socket)
} catch (I2PException|ConnectException routerDown) {
log.log(Level.WARNING, "router disconnected?", routerDown)
serverSocket = null
}
}
def socket = serverSocket.accept()
new Endpoint(socket.getPeerDestination(), socket.getInputStream(), socket.getOutputStream(), socket)
}
}