mirror of https://github.com/nodejs/node.git
120 lines
3.3 KiB
JavaScript
120 lines
3.3 KiB
JavaScript
// Flags: --expose-internals
|
|
'use strict';
|
|
|
|
const common = require('../common');
|
|
const StreamWrap = require('internal/js_stream_socket');
|
|
const net = require('net');
|
|
|
|
// This test ensures that when we directly call `socket.destroy()` without
|
|
// having called `socket.end()` on an instance of streamWrap, it will
|
|
// still emit EOF which makes the socket on the other side emit "end" and
|
|
// "close" events, and vice versa.
|
|
{
|
|
let port;
|
|
const server = net.createServer((socket) => {
|
|
socket.on('error', common.mustNotCall());
|
|
socket.on('end', common.mustNotCall());
|
|
socket.on('close', common.mustCall());
|
|
socket.destroy();
|
|
});
|
|
|
|
server.listen(() => {
|
|
port = server.address().port;
|
|
createSocket();
|
|
});
|
|
|
|
function createSocket() {
|
|
let streamWrap;
|
|
const socket = new net.connect({
|
|
port,
|
|
}, () => {
|
|
socket.on('error', common.mustNotCall());
|
|
socket.on('end', common.mustCall());
|
|
socket.on('close', common.mustCall());
|
|
|
|
streamWrap.on('error', common.mustNotCall());
|
|
// The "end" events will be emitted which is as same as
|
|
// the same situation for an instance of `net.Socket` without
|
|
// `StreamWrap`.
|
|
streamWrap.on('end', common.mustCall());
|
|
// Destroying a socket in the server side should emit EOF and cause
|
|
// the corresponding client-side socket closed.
|
|
streamWrap.on('close', common.mustCall(() => {
|
|
server.close();
|
|
}));
|
|
});
|
|
streamWrap = new StreamWrap(socket);
|
|
}
|
|
}
|
|
|
|
// Destroy the streamWrap and test again.
|
|
{
|
|
let port;
|
|
const server = net.createServer((socket) => {
|
|
socket.on('error', common.mustNotCall());
|
|
socket.on('end', common.mustCall());
|
|
socket.on('close', common.mustCall(() => {
|
|
server.close();
|
|
}));
|
|
// Do not `socket.end()` and directly `socket.destroy()`.
|
|
});
|
|
|
|
server.listen(() => {
|
|
port = server.address().port;
|
|
createSocket();
|
|
});
|
|
|
|
function createSocket() {
|
|
let streamWrap;
|
|
const socket = new net.connect({
|
|
port,
|
|
}, () => {
|
|
socket.on('error', common.mustNotCall());
|
|
socket.on('end', common.mustNotCall());
|
|
socket.on('close', common.mustCall());
|
|
|
|
streamWrap.on('error', common.mustNotCall());
|
|
streamWrap.on('end', common.mustNotCall());
|
|
// Destroying a socket in the server side should emit EOF and cause
|
|
// the corresponding client-side socket closed.
|
|
streamWrap.on('close', common.mustCall());
|
|
streamWrap.destroy();
|
|
});
|
|
streamWrap = new StreamWrap(socket);
|
|
}
|
|
}
|
|
|
|
// Destroy the client socket and test again.
|
|
{
|
|
let port;
|
|
const server = net.createServer((socket) => {
|
|
socket.on('error', common.mustNotCall());
|
|
socket.on('end', common.mustCall());
|
|
socket.on('close', common.mustCall(() => {
|
|
server.close();
|
|
}));
|
|
});
|
|
|
|
server.listen(() => {
|
|
port = server.address().port;
|
|
createSocket();
|
|
});
|
|
|
|
function createSocket() {
|
|
let streamWrap;
|
|
const socket = new net.connect({
|
|
port,
|
|
}, () => {
|
|
socket.on('error', common.mustNotCall());
|
|
socket.on('end', common.mustNotCall());
|
|
socket.on('close', common.mustCall());
|
|
|
|
streamWrap.on('error', common.mustNotCall());
|
|
streamWrap.on('end', common.mustNotCall());
|
|
streamWrap.on('close', common.mustCall());
|
|
socket.destroy();
|
|
});
|
|
streamWrap = new StreamWrap(socket);
|
|
}
|
|
}
|