• 【NodeJs】Ctrl+C在Linux平台和Windows平台下的TCP连接中的不同表现


    Linux平台:CentOS release 6.5 (Final)

    Windows平台:Windows 7 旗舰版

    服务器端代码如下:

    var net = require('net');
    var server = net.createServer(function(c){
        console.log('client connected: ' + c.remoteAddress);
        c.setNoDelay(true);
        c.on('data', function(data){
            console.log(data);
        });
        c.on('end', function(){
            console.log('disconnected from client');
        });
        c.on('error', function(err){
            console.log(err);
        });
    });
    server.listen({port:6200}, function(){
        console.log('server bound');
    });

    客户端代码如下:

    const net = require('net');
    const client = net.connect({port: 6200, localPort:6201}, function(){
        //'connect' listener
        console.log('connected to server!');
        client.setNoDelay(true);
        for (var i=0; i<1000; i++) {
            var now = Date.now();
            while (Date.now() < now + 3000) {}
            client.write('中国人');
        }
    });
    
    client.on('data', (data)=>{
        console.log(data.toString());
    });
    
    client.on('end', ()=>{
        console.log('disconnected from server');
    });
    

     在Linux上运行server.js,然后分别在Linux上和Winows上执行client.js,并在执行过程中按下Ctrl+C终止进程,我发现服务器端做出的反应是不一样的。当在Linux上终止客户端时,服务器端会输出“disconnected from client”;而在Window上终止客户端时,服务器端会输出“{ [Error: read ECONNRESET] code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' }”(若注释掉服务器端对error事件的监听,则服务器端就会抛出异常并退出)。为什么会这样呢?我用tcpdump工具监听了一下服务器端的6200端口,发现了原因。

    //在按下Ctrl+C键时,Linux上的客户端向服务器发送了带FIN标记的报文
    16:53:59.948186 IP localhost.6201 > localhost.lm-x: Flags [F.], seq 10, ack 1, win 257, options [nop,nop,TS val 1250056051 ecr 1250053568], length 0
    //在按下Ctrl+C键时,在Windows上的“客户端”向服务器发送了带RST标记的报文 16:55:14.681005 IP localhost.6201 > localhost.lm-x: Flags [R.], seq 6007, ack 1, win 0, length 0

     注:

    1.复位比特(RST):当RST=1时,表明TCP连接出现严重差错,必须释放连接,再重新建立连接。

  • 相关阅读:
    如何在CPU上优化GEMM(下)
    如何在CPU上优化GEMM(上)
    编译ONNX模型Compile ONNX Models
    深度学习加速器堆栈Deep Learning Accelerator Stack
    TVM部署和集成Deploy and Integration
    Relay张量集成
    TVM 架构设计
    NVIDIA Turing Architecture架构设计(下)
    NVIDIA Turing Architecture架构设计(上)
    antD——upLoad组件控制台报错404,405问题
  • 原文地址:https://www.cnblogs.com/alwu007/p/5388182.html
Copyright © 2020-2023  润新知