TIME_WAIT状态TCP连接导致套接字无法重用实验

news2024/12/24 21:47:17

理论相关知识可以看一下《TIME_WAIT相关知识》。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<errno.h>
#include<syslog.h>
#include<signal.h>

void error_handling(char *buf);

#define  MAXLINE     1024
static int count;
static void sig_int(int signo) {
    printf("\nreceived %d datagrams\n", count);
    exit(0);
}
int main(int argc, char **argv) {
    if (argc != 2) {
        error_handling("usage: select01 <IPaddress> or <Port>");
    }



    int serv_sock = socket(AF_INET,SOCK_STREAM,0);

    struct sockaddr_in server_addr;
        memset(&server_addr, 0, sizeof(server_addr));
        server_addr.sin_family=AF_INET;
        server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
        server_addr.sin_port=htons(atoi(argv[1]));

    if(bind(serv_sock, (struct sockaddr*) &server_addr, sizeof(server_addr))==-1){
        fprintf(stderr, "error in bind: %s (%d)\n", strerror(errno), errno);
                    exit(errno);
    }
        if(listen(serv_sock, 5)==-1){
        fprintf(stderr, "error in listen: %s (%d)\n", strerror(errno), errno);
                    exit(errno);
    }


    signal(SIGPIPE, sig_int);


     int connfd;
    struct sockaddr_in client_addr;
    socklen_t client_len = sizeof(client_addr);

    if ((connfd = accept(serv_sock, (struct sockaddr *) &client_addr, &client_len)) < 0) {
        printf("accept failed");
        exit(0);
    }

    char message[MAXLINE];
    count = 0;
    int n;
    for (;;) {
        int n = read(connfd, message, MAXLINE);
        if (n < 0) {
            fprintf(stderr, "error in read: %s (%d)\n", strerror(errno), errno);
                    exit(0);
        } else if (n == 0) {
            fprintf(stderr, "client closed: %s (%d)\n", strerror(0), 0);
            exit(0);
        }
        message[n] = 0;
        printf("received %d bytes: %s\n", n, message);
        count++;
    }
}
void error_handling(char *buf)
{
        fputs(buf, stderr);
        fputc('\n', stderr);
        exit(1);
}

实验一

gcc timeWaitTest.c -o timeWaitTest进行编译,./timeWaitTest 8080执行,这是在服务器这样操作,然后在客户端使用sudo telnet 127.0.0.1 8080进行连接,然后按照下图操作,进行第一步实验。
1.在客户端先输入network,然后看到服务器端输出received 9 bytes: network
2.客户端同时按住ctrl+c,然后按下回车键,出现了telnet>之后再输入quit,然后服务器端出现了client closed: Success (0)
3.在服务器端快速输入./timeWaitTest 8080,可以正常重启。
在这里插入图片描述

实验二

服务器./timeWaitTest 8080运行,然后在客户端使用sudo telnet 127.0.0.1 8080进行连接。
1.在客户端先输入network,然后看到服务器端输出received 9 bytes: network
2.服务器端同时按住ctrl+c,可以看到客户端被动关闭了。
3.在服务器端快速输入./timeWaitTest 8080,无法正常重启,输出error in bind: Address already in use (98)
在这里插入图片描述

在服务器端sudo netstat -altnp | grep 8080查看一下8080端口,发现这个端口还在监听,状态是TIME_WAIT。当sudo netstat -altnp | grep 8080看到没有任何数据输出的时候,就可以./timeWaitTest 8080再次成功重启了。
在这里插入图片描述

此文章为11月Day 25学习笔记,内容来源于极客时间《网络编程实战》。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1263344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

API接口测试工具的主要作用及选择指南

API接口测试是现代软件开发中至关重要的一环。为了确保不同组件之间的无缝集成和功能正常运作&#xff0c;API接口测试工具应运而生。本文将介绍API接口测试工具的主要作用&#xff0c;以及在选择适合项目的工具时需要考虑的因素。 1、功能测试&#xff1a;API接口测试工具的首…

基于Python+requests编写的自动化测试项目-实现流程化的接口串联

框架产生目的&#xff1a;公司走的是敏捷开发模式&#xff0c;编写这种框架是为了能够满足当前这种发展模式&#xff0c;用于前后端联调之前&#xff08;后端开发完接口&#xff0c;前端还没有将业务处理完毕的时候&#xff09;以及日后回归阶段&#xff0c;方便为自己腾出学(m…

Stable Diffusion绘画系列【3】:二次元动漫画风

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

C语言——求π的近似值

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> #include<math.h> int main() {int s;double n,t,pi;t1;pi0;n1.0;s1;while (fabs(t)>1e-6){pipit; nn2; s-s; ts/n;}pipi*4;printf("pi%lf\n",pi);return 0; }这里是求小数点后6位——1e-6&#…

漏洞环境靶场搭建(内含DVWA SQLi-LABS upload-labs等)

一、docker环境搭建(以redhat8为例&#xff0c;centos7命令基本一致) 1、安装docker yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin 2、启动docker systemctl start docker 3、配置镜像加速 vim /etc/docker/daemon.json {"registr…

Linux下基于MPI的hello程序设计

Linux下基于MPI的hello程序设计 一、MPICH并行计算库安装实验环境部署创建SSH信任连接&#xff0c;实现免密钥互相连接node1安装MPICH 3.4配置NFS注意(一定要先看)环境测试 二、HELLO WORLD并行程序设计 一、MPICH并行计算库安装 在Linux环境下安装MPICH执行环境&#xff0c;配…

Photoshop Elements 2023 v21.0(ps简化版)

Photoshop Elements 2023是一款ps简化版图像处理软件&#xff0c;它加入了一些新的功能和工具&#xff0c;以帮助用户更高效地处理图片。 新功能&#xff1a;软件加入了黑科技&#xff0c;采用Adobe Sensei AI技术&#xff0c;主打人工智能&#xff0c;一键P图&#xff0c;新增…

tabs切换,当点击tabItem时候,改变选中样式,以及content内容区域

效果图展示&#xff1a; html原生代码&#xff1a; <div><div class"buttons-row nav-select riskType" style"padding: 10px;"><div class"shoucang-title-box flex-start"><div class"shoucang-title-item active&q…

Django回顾【二】

目录 一、Web框架 二、WSGI协议 三、 Django框架 1、MVC与MTV模型 2、Django的下载与使用 补充 3、启动django项目 补充 5、 Django请求生命周期 四、路由控制 1、路由是什么&#xff1f; 2、如何使用 3、path详细使用 4、re_path详细使用 5、反向解析 6、路由…

The Sandbox 与 Shemaroo Entertainment 达成合作,将宝莱坞标杆作品带入元宇宙

我们非常高兴地宣布与印度领先的媒体和娱乐集团 Shemaroo Entertainment 建立合作伙伴关系。BharatBox 是全新的文化元宇宙中心&#xff0c;将展示印度娱乐业的知名艺术家和品牌。该项目标志着 Shemaroo 将逐步涉足数字领域&#xff0c;将电影传统与最先进的技术相结合&#xf…

算法之插入排序及希尔排序(C语言版)

我们来实现上述排序 一.插入排序. 当插入第i(i>1)个元素时&#xff0c;前面的array[0],array[1],.,array[i-1]已经排好序&#xff0c;此时用array[i的排序码与array[i-1]array[i-2].的排序码顺序进行比较&#xff0c;找到插入位置即将arrayU插入&#xff0c;原来位置上的元…

【小布_ORACLE】Part11-1--RMAN Backups笔记

Oracle的数据备份于恢复RMAN Backups 学习第11章需要掌握&#xff1a; 一.RMAN的备份类型 二.使用backup命令创建备份集 三.创建备份文件 四.备份归档日志文件 五.使用RMAN的copy命令创建镜像拷贝 文章目录 Oracle的数据备份于恢复RMAN Backups1.RMAN Backup Concepts&#x…

安卓开发学习---kotlin版---笔记(一)

Hello word 前言&#xff1a;上次学习安卓&#xff0c;学了Java开发&#xff0c;简单的搭了几个安卓界面。这次要学习Kotlin语言&#xff0c;然后开发安卓&#xff0c;趁着还年轻&#xff0c;学点新东西&#xff0c;坚持~ 未来的你会感谢现在努力的你~ 主要学习资料&#xff1a…

使用Python进行帧提取及指定帧插入实现文本隐写(CTF杂项出题方向)

视频是由一系列连续的图像帧组成的&#xff0c;每一帧都是视频的静止画面。这些帧以一定的速率播放&#xff0c;就形成了运动的视频。以下是视频帧的一些基本概念&#xff1a; 帧率&#xff08;Frame Rate&#xff09;&#xff1a; 帧率表示每秒播放的图像帧数量。通常以“帧/秒…

性能自动化测试?

一、思考❓❔ 1.什么是性能自动化测试? 性能 系统负载能力超负荷运行下的稳定性系统瓶颈 自动化测试 使用程序代替手工提升测试效率性能自动化 使用代码模拟大批量用户让用户并发请求多页面多用户并发请求采集参数&#xff0c;统计系统负载能力生成报告 2.Python中的性能…

【JavaEE初阶】——Linux 基本使用和 web 程序部署(下)

文章目录 前言一、Linux 常用命令 1.1 ls 命令 1.2 pwd 命令 1.3 cd 命令 1.4 touch 命令 1.5 cat 命令 1.6 mkdir 命令 1.7 rm 命令 1.8 cp 命令 1.9 mv 命令 1.10 man 命令 1.11 less 命令 1.12 head 命令 1.13 tail 命…

leetcode LCR24反转单链表

反转单链表 题目描述 题目分析 先来说迭代的思想&#xff1a; 上面next cur->next应该放在cur->next pre前面执行&#xff0c;这里笔误 再来说递归的思想&#xff1a; 题目代码 这个代码里面我加了我自己写的测试数据&#xff0c;自己可以去找对应的部分&#xff0c…

Charles下载安装及配置之Mac

因工作需要用到抓包工具&#xff0c;但Fiddler不能在mac上使用&#xff0c;所以找到了Charles&#xff0c;Charles其实是一款代理服务器&#xff0c;通过过将自己设置成系统&#xff08;电脑或者浏览器&#xff09;的网络访问代理服务器&#xff0c;然后截取请求和请求结果达到…

集结!Milvus 老友汇 · 线下 Meetup 来袭

AGI 时代&#xff0c;当“大模型的记忆体”——向量数据库&#xff0c;邂逅 Cloud-Native 的数据管理平台及 AI-Native 的应用&#xff0c;会迸发出怎样的化学反应&#xff1f; 12 月 9 日&#xff01;上海&#xff01;Milvus 社区携手 KubeBlocks 社区&#xff0c;集结来自两大…

可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器

可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器 文章目录 可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 …