mirror of
https://github.com/oven-sh/bun
synced 2026-02-16 13:51:47 +00:00
net: emit 'connection' event rather than storing connectionListener seperately + add captureRejectionSymbol
This commit is contained in:
@@ -360,7 +360,7 @@ const ServerHandlers: SocketHandler<NetSocket> = {
|
||||
const self = socket.data as any as NetServer;
|
||||
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({}) as NetSocket | TLSSocket;
|
||||
_socket.isServer = true;
|
||||
_socket._requestCert = requestCert;
|
||||
@@ -409,12 +409,7 @@ const ServerHandlers: SocketHandler<NetSocket> = {
|
||||
_socket.pause();
|
||||
}
|
||||
|
||||
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<NetSocket> = {
|
||||
} 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);
|
||||
@@ -2073,8 +2064,13 @@ function Server(options?, connectionListener?) {
|
||||
if (typeof options === "function") {
|
||||
connectionListener = options;
|
||||
options = {};
|
||||
this.on("connection", connectionListener);
|
||||
} else if (options == null || typeof options === "object") {
|
||||
options = { ...options };
|
||||
|
||||
if (typeof connectionListener === "function") {
|
||||
this.on("connection", connectionListener);
|
||||
}
|
||||
} else {
|
||||
throw $ERR_INVALID_ARG_TYPE("options", ["Object", "Function"], options);
|
||||
}
|
||||
@@ -2105,7 +2101,6 @@ function Server(options?, connectionListener?) {
|
||||
this.pauseOnConnect = Boolean(pauseOnConnect);
|
||||
this.noDelay = noDelay;
|
||||
|
||||
options.connectionListener = connectionListener;
|
||||
this[bunSocketServerOptions] = options;
|
||||
|
||||
if (options.blockList) {
|
||||
@@ -2442,6 +2437,16 @@ Server.prototype.getsockname = function getsockname(out) {
|
||||
return out;
|
||||
};
|
||||
|
||||
Server.prototype[EventEmitter.captureRejectionSymbol] = function (err, event, sock) {
|
||||
switch (event) {
|
||||
case "connection":
|
||||
sock.destroy(err);
|
||||
break;
|
||||
default:
|
||||
this.emit("error", err);
|
||||
}
|
||||
};
|
||||
|
||||
function emitErrorNextTick(self, error) {
|
||||
self.emit("error", error);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ const { Duplex } = require("node:stream");
|
||||
const addServerName = $newZigFunction("socket.zig", "jsAddServerName", 3);
|
||||
const { throwNotImplemented } = require("internal/shared");
|
||||
const { throwOnInvalidTLSArray, DEFAULT_CIPHERS, validateCiphers } = require("internal/tls");
|
||||
const EventEmitter = require("node:events");
|
||||
|
||||
const { Server: NetServer, Socket: NetSocket } = net;
|
||||
|
||||
@@ -501,7 +502,11 @@ function Server(options, secureConnectionListener): void {
|
||||
return new Server(options, secureConnectionListener);
|
||||
}
|
||||
|
||||
NetServer.$apply(this, [options, secureConnectionListener]);
|
||||
NetServer.$apply(this, [options, () => {}]);
|
||||
|
||||
if (secureConnectionListener) {
|
||||
this.on("secureConnection", secureConnectionListener);
|
||||
}
|
||||
|
||||
this.key = undefined;
|
||||
this.cert = undefined;
|
||||
@@ -631,6 +636,15 @@ function Server(options, secureConnectionListener): void {
|
||||
this.setSecureContext(options);
|
||||
}
|
||||
$toClass(Server, "Server", NetServer);
|
||||
Server.prototype[EventEmitter.captureRejectionSymbol] = function (err, event, sock) {
|
||||
switch (event) {
|
||||
case "secureConnection":
|
||||
sock.destroy(err);
|
||||
break;
|
||||
default:
|
||||
ReflectApply(net.Server.prototype[SymbolFor("nodejs.rejection")], this, [err, event, sock]);
|
||||
}
|
||||
};
|
||||
|
||||
function createServer(options, connectionListener) {
|
||||
return new Server(options, connectionListener);
|
||||
|
||||
Reference in New Issue
Block a user