首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux TCP通信出现CLOSE_WAIT后导致服务端进程挂掉

在前文中讲述了Linux服务端TCP通信出现CLOSE_WAIT状态的原因,这篇文章主要通过一个实例演示它个一个“恶劣”影响:直接使服务端进程Down掉。...再打开一个Linux终端界面,然后输入命令telnet 192.168.1.177 8000作为客户端建立与服务端TCP连接。这时执行脚本....在等待2分钟后,在Windows中使用Wireshark抓包发现由于客户端发送了RST+ACK报文给Linux服务端,所以二者的TCP链路已经被复位了: 这时在Linux中再次使用netstat_nap.sh...这时Linux服务端进程会执行第90行处的close()函数,也即执行正常四次挥手关闭TCP连接。...这样Linux服务端进程还是能够正常执行监听任务: 8 其它 网上有人把这种客户端或者服务端异常关闭的连接叫做TCP半关闭(Half-Close),例如网线拔掉、突然断电等,此时对端连接仍认为双方连接处于打开中

28310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python 实战TCP服务端 - 胖子老板就是服务端

    tcp服务器 胖子老板就是服务端 什么是服务端呢? ? 你看看你,还问这种问题 肥仔来胖子老板店里买烟,肥仔就是客户端,胖子老板就是服务端。...* # 创建套接字 tcp_server_socket = socket(AF_INET, SOCK_STREAM) # 绑定服务端提供服务的端口号 local_addr = ('', 7788)...可以看到,服务端的client_socket关闭之后,就无法继续给客户端提供服务了。 那么来升级一下,将服务改成循环。 tcp服务器 - 胖子老板循环版 ?...() 服务端代码如下: [root@server01 tcp]# vim server.py #coding=utf-8 from socket import * # 创建套接字 tcp_server_socket...服务端改写代码如下: [root@server01 tcp]# vim server.py #coding=utf-8 from socket import * # 创建套接字 tcp_server_socket

    71420

    Linux网络编程-TCP客户端如何获取要连接的服务端IP?

    2 解决方案 本篇就来实现一种解决方法:在建立TCP通信前,可以先通过UDP通信来获取服务端的IP。...IP信息后,即可通过解析到的服务端IP地址,实现与服务端进行TCP连接。...连接 在获取到服务端的IP后,再开启一个线程,与服务端建立TCP连接,并进行数据通信,该线程的实现逻辑如下: 创建一个socket,类型为TCP数据流(SOCK_STREAM) sockaddrd的IP...IP,并进行TCP连接,另外,服务端也可以处理多个客户端的请求: 1)单个客户端连接服务端 2)单个客户端连接并中止后,另一个客户端再次连接服务端 3)客户端先启动后,服务端再启动,客户端依然能在服务端启动后连接到服务端...4)两个客户端现后进行连接服务端 5 总结 本篇介绍了在TCP通信中,客户端通过UDP广播,实现自动获取服务端的IP地址,并进行TCP连接的具体方法,并通过代码实现,来测试此方案是实际效果,为了使服务端能够处理多个客户端的请求

    4.1K20

    Linux网络编程TCP

    OSI 7层模型和TCP/IP四层网络模型对应关系 计算机网路基础的知识不过多讲解,主要是让大家明白接下来的Linux网络编程数据流属于那一层,具体如下图 TCP/IP协议数据流示意图 我们接下来讲解的...Linux网络编程Tcp协议是属于传输层的协议 Linux Socket 网络编程 TCP协议 TCP是面向连接的可靠的传输层协议。...TCP编程 Linux中的网络编程是通过socket接口来进行的。socket是一种特殊的I/O接口,它也是一种文件描述符。常用于不同机器上的进程之间的通信,当然也可以实现本地机器上的进程之间通信。...服务端API接口 socket #include int socket(int family //协议簇 一般 AF_INET PF_INET ,int type /...TCP案例 服务端 #include #include #include #include #include<

    5.4K30

    Linux网络】TCP协议

    Linux中(BSD Unix和Windows也是如此), 超时以500ms为一个单位进行控制, 每次判定超时重发的超时 时间都是500ms的整数倍....SOCKET处于监听状态,可以接受客户端的连接 SYN_SENT, // 客户端发送SYN报文后等待服务端确认的状态 SYN_RCVD, // 服务端接收到客户端的...SYN报文后的状态 ESTABLISHED, // TCP连接已经成功建立,开始传输数据 FIN_WAIT_1, // 客户端主动关闭连接,发送FIN报文后等待服务端确认...FIN_WAIT_2, // 客户端收到服务端的ACK确认后,等待服务端发送FIN报文 CLOSE_WAIT, // 服务端收到客户端的FIN报文后,等待关闭连接...LAST_ACK, // 服务端发送FIN报文后,等待客户端的ACK确认 TIME_WAIT, // 客户端在收到服务端的FIN报文并发送ACK后,进入TIME_WAIT

    9610

    Linux TCP RST情况

    其中复位标志RST的作用就是“复位相应的TCP连接”。 TCP连接和释放时还有许多细节,比如半连接状态、半关闭状态等。详情请参考这方面的巨著《TCP/IP详解》和《UNIX网络编程》。...原因在于Socket.close()方法的语义和TCP的“FIN”标志语义不一样:发送TCP的“FIN”标志表示我不再发送数据了,而Socket.close()表示我不在发送也不接受数据了。...; 客户端和服务器统一使用TCP短连接。...然后是客户端和服务器统一使用TCP长连接:客户端使用TCP长连接很容易配置(直接设置HttpClient就好),而服务器配置长连接就比较麻烦了,就拿tomcat来说,需要设置tomcat的maxKeepAliveRequests...,固定5分钟tcp连接回收,而且发现连接出错时,重发之前10s内消息。

    5.9K10

    网络编程(TCP服务端客户端互访阻塞)

    客户端给服务端发送数据,服务端收到数据后,给客户端反馈数据 客户端: 获取Socket对象,new出来,构造参数:String的ip地址,int的端口号 调用Socket对象的getOutputStream...String对象,new出来,构造参数:byte[]字节数组,0开始,len长度 调用Socket对象的close()方法,关闭socket 客户端的输入流读取read()方法,是阻塞式方法,会在这里等待服务端返回数据...服务端: 获取ServerSocket对象,new出来,构造参数:int的端口号 调用ServerSocket对象的accept()方法,得到Socket对象 调用Socket对象的getInputStream...getOutputStream()方法,得到输出流对象,输出数据 调用Socket对象的close()方法,关闭socket 调用ServerSocket对象的close()方法,关闭ServerSocket 服务端的...);//睡眠10秒钟,客户端会一直等待 OutputStream out=socket.getOutputStream(); out.write("我是服务端

    1.3K30
    领券