Compare commits

...

2 Commits

Author SHA1 Message Date
Jarred-Sumner
ca0d7f4849 bun scripts/glob-sources.mjs 2025-05-29 00:43:46 +00:00
Jarred Sumner
b5402b7a9c feat(node): capture server connection rejection 2025-05-28 17:43:00 -07:00
4 changed files with 42 additions and 11 deletions

View File

@@ -84,6 +84,7 @@ src/js/internal/streams/state.ts
src/js/internal/streams/transform.ts
src/js/internal/streams/utils.ts
src/js/internal/streams/writable.ts
src/js/internal/test/binding.ts
src/js/internal/timers.ts
src/js/internal/tls.ts
src/js/internal/tty.ts

View File

@@ -0,0 +1,6 @@
// Hardcoded module "internal/test/binding"
// Provides access to internal bindings for Node.js test suite compatibility.
module.exports = {
internalBinding: process.binding,
};

View File

@@ -363,7 +363,7 @@ const ServerHandlers: SocketHandler = {
const self = this.data;
socket[kServerSocket] = self._handle;
const options = self[bunSocketServerOptions];
const { pauseOnConnect, connectionListener, [kSocketClass]: SClass, requestCert, rejectUnauthorized } = options;
const { pauseOnConnect, [kSocketClass]: SClass, requestCert, rejectUnauthorized } = options;
const _socket = new SClass({});
_socket.isServer = true;
_socket.server = self;
@@ -409,12 +409,7 @@ const ServerHandlers: SocketHandler = {
self[bunSocketServerConnections]++;
if (typeof connectionListener === "function") {
this.pauseOnConnect = pauseOnConnect;
if (!isTLS) {
connectionListener.$call(self, _socket);
}
}
this.pauseOnConnect = pauseOnConnect;
self.emit("connection", _socket);
// the duplex implementation start paused, so we resume when pauseOnConnect is falsy
if (!pauseOnConnect && !isTLS) {
@@ -455,10 +450,6 @@ const ServerHandlers: SocketHandler = {
} else {
self.authorized = true;
}
const connectionListener = server[bunSocketServerOptions]?.connectionListener;
if (typeof connectionListener === "function") {
connectionListener.$call(server, self);
}
server.emit("secureConnection", self);
// after secureConnection event we emmit secure and secureConnect
self.emit("secure", self);
@@ -2091,6 +2082,9 @@ function Server(options?, connectionListener?) {
options.connectionListener = connectionListener;
this[bunSocketServerOptions] = options;
if (typeof connectionListener === "function") {
this.on("connection", connectionListener);
}
if (options.blockList) {
if (!BlockList.isBlockList(options.blockList)) {

View File

@@ -0,0 +1,30 @@
const common = require('../common');
const assert = require('assert');
const events = require('events');
const { createServer, connect } = require('net');
events.captureRejections = true;
const server = createServer(
common.mustCall(async (sock) => {
server.close();
const _err = new Error('kaboom');
sock.on(
'error',
common.mustCall((err) => {
assert.strictEqual(err, _err);
}),
);
throw _err;
}),
);
server.listen(
0,
common.mustCall(() => {
const sock = connect(server.address().port, server.address().host);
sock.on('close', common.mustCall());
}),
);