在上篇文章中介绍了TCP 的状态转换,现在看之前C/S通信代码的BUG:
(1)如果服务器作为主动方,先调用 close,服务器会进入 FIN_WAIT_2(半关闭状态);
(2)客户端调用 close 后,服务器会处于 TIME_WAIT 状态;
(3)因为服务器需要等待 2MSL 才能进入 CLOSE,在 2MSL(大约 1min)期间,服务器并没有真正关闭,原端口被占用中,如果此时立即再启动服务器,会发现无法启动
解决方法:在 server 代码的 socket()和 bind()调用之间插入如下代码:

int opt = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));

注意:上诉代码仅仅使端口可以复用,上个服务器运行进程仍然是需要等 2MSL,才能关闭。

端口复用(解决C/S模型的BUG)相关推荐

  1. 29.Linux网络编程熟练掌握 TCP 状态张换图熟练堂握端口复用的方法了解半关闭的概念和实现方式了解多路10 转接模型熟练掌握 select 函数的使用熟练使用 fdset 相关函数的使用能够编写

    把昨天的 第二天的内容说一下,复习一下,第二天 讲的东西不算多,但是有两个作业题来写一写, 大致浏览一下,三次握手 四次挥手的过程,大家有没有画一下? 能画出来吗?同学们,大家注意 这个写代码的时候其 ...

  2. 利用Nginx反向代理解决80端口复用(内网域名转发)问题

    公司多台服务器,但只有一个公网IP,80端口只好给公司网站使用 那么访问其他业务系统只能用反向代理做域名转发去实现 即:利用web服务器的80端口代理其它服务器的非80端口,实现80端口复用 反向代理 ...

  3. tcp 端口复用与惊群效应(REUSEADDR、REUSEPORT)

    我在之前的一篇文章中,介绍了我在之前的项目中遇到的端口复用,windows 的udp里端口复用导致了一个bug,具体的链接参考如下: 关于Socket中端口复用_zhc的博客-CSDN博客_socke ...

  4. php开启端口复用,WebServer端口复用后门

    0x00 有朋友问到了我一个关于"无端口可用"的问题.说在如下图所示的内网环境中,firewall只允许Web Server的80端口建立网络连接,并且Web Server上的80 ...

  5. linux socket 端口复用 SO_REUSEADDR

    下面建立的套接字都是tcp套接字 1.进程创建监听套接字socket1,邦定一个指定端口,并接受了若干连接.那么进程创建另外一个套接口socket2,并试图邦定同一个端口时候,bind错误返回&quo ...

  6. 端口复用及其实现分析[Google Patch]

    所谓绑定是指别人连接我只能通过我所绑定的端口,其实是说,你现在有这个端口开放了,人家可以连接到你的服务,也可以进行数据传输,但是也不一定要使用此端口进行传输,可能此端口只用于控制信息的传输 端口 = ...

  7. python监听多个udp端口_Python的Socket编程过程中实现UDP端口复用的实例分享

    关于端口复用 一个套接字不能同时绑定多个端口,如果客户端想绑定端口号,一定要调用发送信息函数之前绑定( bind )端口,因为在发送信息函数( sendto, 或 write ),系统会自动给当前网络 ...

  8. linux网路编程之TCP状态转换及端口复用

    (1)TCP状态转换图 其中图中分为三种状态:实线代表的主动发起连接,虚线代表的被动发起连接,细实线代表的可以双向发起连接的状态. 主动发起连接方状态变化:1)主动发起连接的一方发送SYN标志位,进入 ...

  9. 网络基础4(TCP三次握手,四次握手,TCP流量控制,TCP状态转换 , TCP异常断开,设置TCP属性,端口复用)

    TCP协议 TCP通信时序 下图是一次TCP通讯的时序图.TCP连接建立断开.包含大家熟知的三次握手和四次握手. TCP通讯时序 在这个例子中,首先客户端主动发起连接.发送请求,然后服务器端响应请求, ...

最新文章

  1. 华为鸿蒙vivo,华为鸿蒙成功的关键:要让小米、OPPO、VIVO都用上鸿蒙
  2. oracle 启动监听提示 :The listener supports no services
  3. 实现一个正则表达式引擎in Python(二)
  4. 上海五校赛 丢史蒂芬妮
  5. css伪类元素加在元素前,CSS伪类:before在元素之前 :after 在元素之后实例讲解
  6. 读《爱的艺术》书评而问
  7. MapReduce原理全剖析
  8. Linux文件属性3——文件权限管理
  9. Halcon算子学习:surface_normals_object_model_3d
  10. php把二维数组变为一维,如何将PHP二维数组转换为一维数组
  11. Chrome中使用showModalDialog无法接收返回值,解决方案
  12. SSM excel文件的导入导出基于apache poi
  13. 设计模式(三)之生成器模式(Builder Pattern)
  14. SOCKS5 协议原理详解与应用场景分析
  15. 灰度测试或 AB 测试
  16. PID调节参数的作用
  17. 首次使用PyCharm
  18. Linux命令之大文件分割
  19. c语言小蜜蜂游戏编程,GMS2从零做游戏:小蜜蜂(一)
  20. 可在线听歌却不能下载,破解后可下载有限制的音乐作品

热门文章

  1. java 读 xml_Java读写XML代码示例
  2. 基于flink+clickhouse构建亿级电商全端用户画像平台训练营
  3. 杭州/北京内推 | 蚂蚁集团智能决策团队招聘运筹优化算法工程师/实习生
  4. 多样性文本生成任务的研究进展
  5. 招募 | 清华大学计算机系副教授黄民烈招募NLP方向博士后
  6. BFS 算法解题套路框架+几个用于BFS的set与queue用法和技巧
  7. 全排列代码python_python全排列代码,求解释
  8. Bootstrap——table标签使用横向滚动条解决方案
  9. Soldier and Traveling
  10. Be Positive