net: omit superfluous 'connect' event

Don't emit a 'connect' event on sockets that are handed off to
net.Server 'connection' event listeners.

1. It's superfluous because the connection has already been established
   at that point.

2. The implementation is arguably wrong because the event is emitted on
   the same tick of the event loop while the rule of thumb is to always
   emit it on the next one.

This has been tried before in commit f0a440d but was reverted again in
ede1acc because the change was incomplete (at least one test hadn't
been updated).

Fixes #1047 (again).
This commit is contained in:
Ben Noordhuis 2013-02-28 23:25:29 +01:00
Родитель bb431531a3
Коммит c11612026f
3 изменённых файлов: 8 добавлений и 14 удалений

Просмотреть файл

@ -1118,7 +1118,6 @@ function onconnection(clientHandle) {
DTRACE_NET_SERVER_CONNECTION(socket);
COUNTER_NET_SERVER_CONNECTION(socket);
self.emit('connection', socket);
socket.emit('connect');
}

Просмотреть файл

@ -40,15 +40,12 @@ for (var i = 0; i < N; i++) {
console.log('start server on port ' + common.PORT);
var server = net.createServer(function(connection) {
connection.on('connect', function() {
connection.write(body.slice(0, part_N));
connection.write(body.slice(part_N, 2 * part_N));
assert.equal(false, connection.write(body.slice(2 * part_N, N)));
console.log('bufferSize: ' + connection.bufferSize);
assert.ok(0 <= connection.bufferSize &&
connection.bufferSize <= N);
connection.end();
});
connection.write(body.slice(0, part_N));
connection.write(body.slice(part_N, 2 * part_N));
assert.equal(false, connection.write(body.slice(2 * part_N, N)));
console.log('bufferSize: ' + connection.bufferSize);
assert.ok(0 <= connection.bufferSize && connection.bufferSize <= N);
connection.end();
});
server.listen(common.PORT, function() {

Просмотреть файл

@ -33,10 +33,8 @@ var server = net.createServer(function(socket) {
console.error('SERVER: got socket connection');
socket.resume();
socket.on('connect', function() {
console.error('SERVER connect, writing');
socket.write('hello\r\n');
});
console.error('SERVER connect, writing');
socket.write('hello\r\n');
socket.on('end', function() {
console.error('SERVER socket end, calling end()');