• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright Joyent, Inc. and other Node contributors.
2//
3// Permission is hereby granted, free of charge, to any person obtaining a
4// copy of this software and associated documentation files (the
5// "Software"), to deal in the Software without restriction, including
6// without limitation the rights to use, copy, modify, merge, publish,
7// distribute, sublicense, and/or sell copies of the Software, and to permit
8// persons to whom the Software is furnished to do so, subject to the
9// following conditions:
10//
11// The above copyright notice and this permission notice shall be included
12// in all copies or substantial portions of the Software.
13//
14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
17// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20// USE OR OTHER DEALINGS IN THE SOFTWARE.
21
22'use strict';
23require('../common');
24const assert = require('assert');
25const net = require('net');
26
27let bytesRead = 0;
28let bytesWritten = 0;
29let count = 0;
30
31const tcp = net.Server(function(s) {
32  console.log('tcp server connection');
33
34  // trigger old mode.
35  s.resume();
36
37  s.on('end', function() {
38    bytesRead += s.bytesRead;
39    console.log(`tcp socket disconnect #${count}`);
40  });
41});
42
43tcp.listen(0, function doTest() {
44  console.error('listening');
45  const socket = net.createConnection(this.address().port);
46
47  socket.on('connect', function() {
48    count++;
49    console.error('CLIENT connect #%d', count);
50
51    socket.write('foo', function() {
52      console.error('CLIENT: write cb');
53      socket.end('bar');
54    });
55  });
56
57  socket.on('finish', function() {
58    bytesWritten += socket.bytesWritten;
59    console.error('CLIENT end event #%d', count);
60  });
61
62  socket.on('close', function() {
63    console.error('CLIENT close event #%d', count);
64    console.log(`Bytes read: ${bytesRead}`);
65    console.log(`Bytes written: ${bytesWritten}`);
66    if (count < 2) {
67      console.error('RECONNECTING');
68      socket.connect(tcp.address().port);
69    } else {
70      tcp.close();
71    }
72  });
73});
74
75process.on('exit', function() {
76  assert.strictEqual(bytesRead, 12);
77  assert.strictEqual(bytesWritten, 12);
78});
79