Skip to content

Commit bf92cc0

Browse files
authored
Asynchronous listen (#17)
* Listen to listening event * Add tests * Bump version
1 parent 3e09a33 commit bf92cc0

3 files changed

Lines changed: 36 additions & 11 deletions

File tree

index.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ const createServer = (server, options) => {
3232
throw err;
3333
}
3434

35+
function listen(proxy, server) {
36+
const port = server.address().port;
37+
server.close();
38+
proxied.listen(port, () => console.log(`PROXY protocol parser listening to port ${port}`));
39+
}
40+
3541
// create proxy protocol processing server
3642
const proxied = require('net').createServer(socket => {
3743
const buf = [];
@@ -111,11 +117,11 @@ const createServer = (server, options) => {
111117
});
112118
}
113119

120+
// listen to listening event
121+
server.on('listening', () => listen(proxied, server));
114122
// if server is already listening, use that port
115123
if (server.listening) {
116-
const port = server.address().port;
117-
server.close();
118-
proxied.listen(port, () => console.log(`PROXY protocol parser listening to port ${port}`));
124+
listen(proxied, server);
119125
}
120126

121127
return proxied;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "proxyproto",
3-
"version": "1.0.10",
3+
"version": "1.1.0",
44
"description": "Pre-process PROXY protocol headers from node tcp sockets",
55
"main": "index.js",
66
"scripts": {

test/index.js

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -138,13 +138,32 @@ module.exports = async t => {
138138
});
139139

140140
t.test('listening port is re-used', async (t) => {
141-
const server = http.createServer();
142-
server.listen(PORT);
143-
const proxied = proxyproto.createServer(server);
144-
t.ok(proxied.listening);
145-
t.notOk(server.listening);
146-
t.same(proxied.address().port, PORT);
147-
proxied.close();
141+
await new Promise(resolve => {
142+
const server = http.createServer();
143+
server.listen(PORT, () => {
144+
const proxied = proxyproto.createServer(server);
145+
t.ok(proxied.listening);
146+
t.notOk(server.listening);
147+
t.same(proxied.address().port, PORT);
148+
proxied.close();
149+
resolve();
150+
});
151+
});
152+
});
153+
154+
t.test('listening event is listened to', async (t) => {
155+
await new Promise(resolve => {
156+
const server = http.createServer();
157+
const proxied = proxyproto.createServer(server);
158+
proxied.on('listening', () => {
159+
t.ok(proxied.listening);
160+
t.notOk(server.listening);
161+
t.same(proxied.address().port, PORT);
162+
proxied.close();
163+
resolve();
164+
});
165+
server.listen(PORT);
166+
});
148167
});
149168

150169
// first load test has ~.2ms added latency

0 commit comments

Comments
 (0)