Get your own Node server
const net = require('net');
const path = require('path');
const fs = require('fs');

// Create a temporary directory for IPC socket
const tmpDir = require('os').tmpdir();
const sockPath = path.join(tmpDir, 'test-socket.sock');

// Clean up any existing socket file
if (fs.existsSync(sockPath)) {
  fs.unlinkSync(sockPath);
}

// Create a server with various socket options
const server = net.createServer({ allowHalfOpen: true }, (socket) => {
  console.log('Server: Client connected');
  
  // Set socket options
  socket.setKeepAlive(true, 5000);
  socket.setNoDelay(true);
  socket.setTimeout(10000);
  
  // Log socket options
  console.log('Server socket options:');
  console.log(`- keepAlive: ${socket.keepAlive}`);
  console.log(`- keepAliveInitialDelay: ${socket.keepAliveInitialDelay}`);
  console.log(`- noDelay: ${socket.noDelay}`);
  console.log(`- timeout: ${socket.timeout}`);
  
  socket.on('data', (data) => {
    console.log(`Server received: ${data}`);
    socket.write(`Echo: ${data}`);
  });
  
  socket.on('end', () => {
    console.log('Server: Client ended connection');
  });
  
  socket.on('timeout', () => {
    console.log('Server: Socket timeout');
    socket.end();
  });
});

// Start the server using IPC
server.listen(sockPath, () => {
  console.log(`Server listening on ${sockPath}`);
  
  // Create a client with options
  const client = net.createConnection({
    path: sockPath,
    allowHalfOpen: true,
    noDelay: true,
    keepAlive: true,
    keepAliveInitialDelay: 5000
  }, () => {
    console.log('Client: Connected to server');
    
    // Log client socket options
    console.log('Client socket options:');
    console.log(`- allowHalfOpen: ${client.allowHalfOpen}`);
    console.log(`- keepAlive: ${client.keepAlive}`);
    console.log(`- keepAliveInitialDelay: ${client.keepAliveInitialDelay}`);
    console.log(`- noDelay: ${client.noDelay}`);
    
    // Send some data
    client.write('Hello from client');
  });
  
  client.on('data', (data) => {
    console.log(`Client received: ${data}`);
    
    // End the connection after receiving response
    setTimeout(() => {
      client.end();
    }, 1000);
  });
  
  client.on('end', () => {
    console.log('Client: Connection ended');
    
    // Close the server
    server.close(() => {
      // Clean up the socket file
      if (fs.existsSync(sockPath)) {
        fs.unlinkSync(sockPath);
      }
    });
  });
  
  client.on('error', (err) => {
    console.error('Client error:', err);
    server.close();
  });
});

server.on('error', (err) => {
  console.error('Server error:', err);
});

// Close server after 30 seconds if not already closed
setTimeout(() => {
  if (server.listening) {
    console.log('Closing server due to timeout');
    server.close();
  }
}, 30000);

              
Server listening on /tmp/test-socket.sock
Client: Connected to server
Client socket options:
- allowHalfOpen: true
- keepAlive: true
- keepAliveInitialDelay: 5000
- noDelay: true
Server: Client connected
Server socket options:
- keepAlive: true
- keepAliveInitialDelay: 5000
- noDelay: true
- timeout: 10000
Server received: Hello from client
Client received: Echo: Hello from client
Client: Connection ended
Server: Client ended connection