当前位置: 首页 > article >正文

【计算机网络】解决bind error

服务器有时可以立即重启,有时候无法立即重启 — bind error

首先要知道:四次挥手动作完成之后,主动断开连接的一方要维持一段时间的TIME_WAIT

bind error原因:因为是服务器主动断开的,所以服务器要去维持TIME_WAIT状态,维持该状态期间,该端口依旧被占用,所以就无法绑定成功

解决方案:使用setsockopt() 设置地址复用

void initServer()
{
    // 1.1创建socket文件套接字对象
    _listensock = socket(AF_INET, SOCK_STREAM, 0);
    if (_listensock < 0)
    {
        exit(SOCKET_ERR);
    }
    // 1.2设置地址复用
    int opt = 1;
    setsockopt(_listensock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));

    // 2.bind绑定自己的网络信息
    struct sockaddr_in local;
    memset(&local, 0, sizeof(local));
    local.sin_family = AF_INET;
    local.sin_port = htons(_port);
    local.sin_addr.s_addr = INADDR_ANY;
    if (bind(_listensock, (struct sockaddr *)&local, sizeof(local)) < 0)
    {
        exit(BIND_ERR);
    }

    // 3.设置socket 为监听状态
    if (listen(_listensock, gbacklog) < 0) // listen第二个参数以后在讲
    {
        exit(LISTEN_ERR);
    }
}


http://www.kler.cn/a/407543.html

相关文章:

  • python特殊字符序列
  • 微信分账系统供应链分润微信支付 (亲测源码)
  • 力扣 189. 轮转数组
  • 鸿蒙操作系统(HarmonyOS)开发的初学者了解和入门
  • Linux——进程间通信之管道
  • 观察者模式和订阅模式
  • 如何最简单、通俗地理解Python的迭代器?
  • Vue 3 中 onUnload 和 onPageScroll 使用详解
  • 一文学习开源框架OkHttp
  • Vue3 + Vite + Electron + TS 项目构建
  • FPGA经验谈系列文章——6、常用代码的逻辑级数预估(条件语句)
  • 万物皆可Docker,在NAS上一键部署最新苹果MacOS 15系统
  • IDEA2023 SpringBoot整合MyBatis(三)
  • LeetCode 力扣 热题 100道(八)相交链表(C++)
  • DB2 import/export data
  • 苹果系统中利用活动监视器来终止进程
  • MYSQL- 查看存储过程调式信息语句(二十七)
  • 【AI系统】核心计算之矩阵乘
  • 安装支持ssl的harbor 2.1.4 docker 19.03.8 docker-compose 1.24.0
  • 百度主动推送可以提升抓取,它能提升索引量吗?
  • Python入门(14)--数据分析基础
  • 删除链表中倒数第N和节点
  • 【LLM】一文学会SPPO
  • 数字孪生赋能智慧校园:构建全方位校园安全保障新体系
  • 漫步北京小程序+气象景观数字化服务平台,让气象景观触手可及
  • 自制游戏:监狱逃亡