fix: catch thrown maConn errors in listener (#122)

When upgrading sockets to MultiaddConnections, it's possible for an error to be thrown.
This can crash the application if a client disconnects prior to the listener
uprading the socket, as is likely occurring in #121. Errors will now be caught and logged
when attempting to upgrade the socket.
This commit is contained in:
Jacob Heun 2020-02-14 14:12:30 +01:00 committed by GitHub
parent 0c2d84e395
commit 86db568cd8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -20,15 +20,15 @@ module.exports = ({ handler, upgrader }, options) => {
// Avoid uncaught errors caused by unstable connections // Avoid uncaught errors caused by unstable connections
socket.on('error', err => log('socket error', err)) socket.on('error', err => log('socket error', err))
const maConn = toConnection(socket, { listeningAddr }) let maConn
log('new inbound connection %s', maConn.remoteAddr)
let conn let conn
try { try {
maConn = toConnection(socket, { listeningAddr })
log('new inbound connection %s', maConn.remoteAddr)
conn = await upgrader.upgradeInbound(maConn) conn = await upgrader.upgradeInbound(maConn)
} catch (err) { } catch (err) {
log.error('inbound connection failed to upgrade', err) log.error('inbound connection failed', err)
return maConn.close() return maConn && maConn.close()
} }
log('inbound connection %s upgraded', maConn.remoteAddr) log('inbound connection %s upgraded', maConn.remoteAddr)