Skip to content
This repository has been archived by the owner on Aug 29, 2023. It is now read-only.

feat: add socket backlog option #263

Merged
merged 4 commits into from
Apr 12, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@ export interface TCPOptions {
*/
maxConnections?: number

/**
* Parameter to specify the maximum length of the queue of pending connections
* https://nodejs.org/dist/latest-v18.x/docs/api/net.html#serverlisten
*/
backlog?: number

/**
* Close server (stop listening for new connections) if connections exceed a limit.
* Open server (start listening for new connections) if connections fall below a limit.
Expand Down Expand Up @@ -215,6 +221,7 @@ class TCP implements Transport {
return new TCPListener({
...options,
maxConnections: this.opts.maxConnections,
backlog: this.opts.backlog,
closeServerOnMaxConnections: this.opts.closeServerOnMaxConnections,
socketInactivityTimeout: this.opts.inboundSocketInactivityTimeout,
socketCloseTimeout: this.opts.socketCloseTimeout,
Expand Down
9 changes: 8 additions & 1 deletion src/listener.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ interface Context extends TCPCreateListenerOptions {
socketInactivityTimeout?: number
socketCloseTimeout?: number
maxConnections?: number
backlog?: number
metrics?: Metrics
closeServerOnMaxConnections?: CloseServerOnMaxConnectionsOpts
}
Expand Down Expand Up @@ -91,6 +92,10 @@ export class TCPListener extends EventEmitter<ListenerEvents> implements Listene
}
}

if (context.backlog != null && context.backlog <= 0) {
throw Error('backlog must be > 0')
}
maschad marked this conversation as resolved.
Show resolved Hide resolved

this.server
.on('listening', () => {
if (context.metrics != null) {
Expand Down Expand Up @@ -269,12 +274,14 @@ export class TCPListener extends EventEmitter<ListenerEvents> implements Listene

const peerId = ma.getPeerId()
const listeningAddr = peerId == null ? ma.decapsulateCode(CODE_P2P) : ma
const netConfig = multiaddrToNetConfig(listeningAddr)
const { backlog } = this.context

this.status = {
started: true,
listeningAddr,
peerId,
netConfig: multiaddrToNetConfig(listeningAddr)
netConfig: backlog ? { ...netConfig, backlog } : netConfig
maschad marked this conversation as resolved.
Show resolved Hide resolved
}

await this.netListen()
Expand Down