1'use strict';
2
3const common = require('../common');
4const assert = require('assert');
5const net = require('net');
6
7{
8  const server = net.createServer(common.mustCall((socket) => {
9    socket.end(Buffer.alloc(1024));
10  })).listen(0, common.mustCall(() => {
11    const socket = net.connect(server.address().port);
12    assert.strictEqual(socket.allowHalfOpen, false);
13    socket.resume();
14    socket.on('end', common.mustCall(() => {
15      process.nextTick(() => {
16        // Ensure socket is not destroyed straight away
17        // without proper shutdown.
18        assert(!socket.destroyed);
19        server.close();
20      });
21    }));
22    socket.on('finish', common.mustCall(() => {
23      assert(!socket.destroyed);
24    }));
25    socket.on('close', common.mustCall());
26  }));
27}
28
29{
30  const server = net.createServer(common.mustCall((socket) => {
31    socket.end(Buffer.alloc(1024));
32  })).listen(0, common.mustCall(() => {
33    const socket = net.connect(server.address().port);
34    assert.strictEqual(socket.allowHalfOpen, false);
35    socket.resume();
36    socket.on('end', common.mustCall(() => {
37      assert(!socket.destroyed);
38    }));
39    socket.end('asd');
40    socket.on('finish', common.mustCall(() => {
41      assert(!socket.destroyed);
42    }));
43    socket.on('close', common.mustCall(() => {
44      server.close();
45    }));
46  }));
47}
48