Skip to content

Commit edb9daa

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

3 files changed

Lines changed: 34 additions & 10 deletions

File tree

index.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,17 @@ const createServer = (server, options) => {
111111
});
112112
}
113113

114-
// if server is already listening, use that port
115-
if (server.listening) {
114+
// listen to listening event
115+
function listen() {
116116
const port = server.address().port;
117117
server.close();
118118
proxied.listen(port, () => console.log(`PROXY protocol parser listening to port ${port}`));
119119
}
120+
server.on('listening', listen);
121+
// if server is already listening, use that port
122+
if (server.listening) {
123+
listen();
124+
}
120125

121126
return proxied;
122127

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)