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'; 23const common = require('../common'); 24const assert = require('assert'); 25const net = require('net'); 26const msg = 'test'; 27let stopped = true; 28let server1Sock; 29 30 31const server1ConnHandler = (socket) => { 32 socket.on('data', function(data) { 33 if (stopped) { 34 assert.fail('data event should not have happened yet'); 35 } 36 37 assert.strictEqual(data.toString(), msg); 38 socket.end(); 39 server1.close(); 40 }); 41 42 server1Sock = socket; 43}; 44 45const server1 = net.createServer({ pauseOnConnect: true }, server1ConnHandler); 46 47const server2ConnHandler = (socket) => { 48 socket.on('data', function(data) { 49 assert.strictEqual(data.toString(), msg); 50 socket.end(); 51 server2.close(); 52 53 assert.strictEqual(server1Sock.bytesRead, 0); 54 server1Sock.resume(); 55 stopped = false; 56 }); 57}; 58 59const server2 = net.createServer({ pauseOnConnect: false }, server2ConnHandler); 60 61server1.listen(0, function() { 62 const clientHandler = common.mustCall(function() { 63 server2.listen(0, function() { 64 net.createConnection({ port: this.address().port }).write(msg); 65 }); 66 }); 67 net.createConnection({ port: this.address().port }).write(msg, clientHandler); 68}); 69 70process.on('exit', function() { 71 assert.strictEqual(stopped, false); 72}); 73