socket: Set time out and forcibly close timed out sockets
Some checks failed
continuous-integration/appveyor/branch AppVeyor build failed

This commit is contained in:
Jonatan Nilsson 2023-11-03 22:39:19 +00:00
parent 598548d97b
commit 783d3c1d23
3 changed files with 24 additions and 6 deletions

View file

@ -1061,6 +1061,22 @@ ctx.state.nonce = nonce;
} }
} }
create() {
this.compile()
this.server = this.http.createServer(this.requestStart.bind(this))
this.server.on('connection', function (socket) {
// Set socket idle timeout in milliseconds
socket.setTimeout(1000 * 60 * 5) // 5 minutes
// Wait for timeout event (socket will emit it when idle timeout elapses)
socket.on('timeout', function () {
// Call destroy again
socket.destroy();
})
})
}
listen(port, orgIp, orgcb) { listen(port, orgIp, orgcb) {
let ip = orgIp let ip = orgIp
let cb = orgcb let cb = orgcb
@ -1071,8 +1087,8 @@ ctx.state.nonce = nonce;
if (typeof(port) !== 'number') { if (typeof(port) !== 'number') {
throw new Error('Flaska.listen() called with non-number in port') throw new Error('Flaska.listen() called with non-number in port')
} }
this.compile()
this.server = this.http.createServer(this.requestStart.bind(this)) this.create()
this.server.listen(port, ip, cb) this.server.listen(port, ip, cb)
} }
@ -1082,8 +1098,7 @@ ctx.state.nonce = nonce;
return Promise.reject(new Error('Flaska.listen() called with non-number in port')) return Promise.reject(new Error('Flaska.listen() called with non-number in port'))
} }
this.compile() this.create()
this.server = this.http.createServer(this.requestStart.bind(this))
if (this.server.listenAsync && typeof(this.server.listenAsync) === 'function') { if (this.server.listenAsync && typeof(this.server.listenAsync) === 'function') {
return this.server.listenAsync(port, ip) return this.server.listenAsync(port, ip)

View file

@ -1,6 +1,6 @@
{ {
"name": "flaska", "name": "flaska",
"version": "1.3.3", "version": "1.3.4",
"description": "Flaska is a micro web-framework for node. It is designed to be fast, simple and lightweight, and is distributed as a single file module with no dependencies.", "description": "Flaska is a micro web-framework for node. It is designed to be fast, simple and lightweight, and is distributed as a single file module with no dependencies.",
"main": "flaska.mjs", "main": "flaska.mjs",
"scripts": { "scripts": {

View file

@ -6,7 +6,7 @@ const indexMap = [
'thirdCall', 'thirdCall',
] ]
export function fakeHttp(inj1, inj2) { export function fakeHttp(inj1, inj2, inj3) {
let intermediate = { let intermediate = {
createServer: function(cb) { createServer: function(cb) {
if (inj1) inj1(cb) if (inj1) inj1(cb)
@ -15,6 +15,9 @@ export function fakeHttp(inj1, inj2) {
listen: function(port, ip, cb) { listen: function(port, ip, cb) {
if (inj2) inj2(port, ip, cb) if (inj2) inj2(port, ip, cb)
else if (cb) cb() else if (cb) cb()
},
on: function(name, handler) {
if (inj3) inj3(name, handler)
} }
} }
} }