This repository was archived by the owner on Sep 11, 2025. It is now read-only.

Description
This following method getIsPortTaken might falsely return false, even though a server might be running on the configured protocol, host and port.
|
function getIsPortTaken(config: JestProcessManagerOptions) { |
|
let server: net.Server |
|
const cleanupAndReturn: (val: boolean) => void = result => |
|
new Promise(resolve => server.once('close', () => resolve(result)).close()) |
|
return new Promise((resolve, reject) => { |
|
server = net |
|
.createServer() |
|
.once('error', (err: JestProcessManagerError) => |
|
err.code === 'EADDRINUSE' ? resolve(cleanupAndReturn(true)) : reject(), |
|
) |
|
.once('listening', () => resolve(cleanupAndReturn(false))) |
|
.listen(config.port, config.host) |
|
}) |
|
} |
This renders usedPortAction useless, and for example would lead to a server being started while ignore should have prevented that.
From what I understood this is because of SO_REUSEADDR and SO_REUSEPORT:
Package such as node-portscanner would use net.Socket() to prevent that: https://github.com/baalexander/node-portscanner/blob/4fc93fe2a5cc9db983caab57bfe27cbee4de9cc5/lib/portscanner.js#L100-L135