Skip to content

Commit 13950af

Browse files
committed
Properly close connections in Deno
1 parent 408a2fb commit 13950af

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

deno/polyfills.js

+13-5
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ export const net = {
2828
const socket = {
2929
error,
3030
success,
31-
readyState: 'closed',
31+
readyState: 'open',
3232
connect: (port, hostname) => {
3333
socket.raw = null
34+
socket.readyState = 'connecting'
3435
typeof port === 'string'
3536
? Deno.connect({ transport: 'unix', path: socket.path = port }).then(success, error)
3637
: Deno.connect({ transport: 'tcp', port: socket.port = port, hostname: socket.hostname = hostname || 'localhost' }).then(success, error) // eslint-disable-line
@@ -72,15 +73,21 @@ export const net = {
7273
return false
7374
},
7475
destroy: () => close(true),
75-
end: close
76+
end: (x) => {
77+
x && socket.write(x)
78+
close()
79+
}
7680
}
7781

7882
return socket
7983

8084
async function success(raw) {
85+
if (socket.readyState !== 'connecting')
86+
return raw.close()
87+
8188
const encrypted = socket.encrypted
82-
socket.readyState = 'open'
8389
socket.raw = raw
90+
socket.readyState = 'open'
8491
socket.encrypted
8592
? call(socket.events.secureConnect)
8693
: call(socket.events.connect)
@@ -115,10 +122,10 @@ export const net = {
115122
}
116123

117124
function closed() {
118-
socket.break = socket.encrypted = false
119-
if (socket.readyState !== 'open')
125+
if (socket.readyState === 'closed')
120126
return
121127

128+
socket.break = socket.encrypted = false
122129
call(socket.events.close)
123130
socket.readyState = 'closed'
124131
}
@@ -139,6 +146,7 @@ export const net = {
139146
export const tls = {
140147
connect({ socket, ...options }) {
141148
socket.encrypted = true
149+
socket.readyState = 'connecting'
142150
Deno.startTls(socket.raw, { hostname: socket.hostname, ...options })
143151
.then(socket.success, socket.error)
144152
socket.raw = null

0 commit comments

Comments
 (0)