TCP/UDP 通信中 server 端异常关闭后无法再次连接

TCP/UDP 通信中 server 端异常关闭后无法再次连接

Q:在 TCP/UDP 通信中,服务器和客户端正常通信时若手动异常关闭 server 端进程,再次运行开启 server 端程序会在 bind 函数位置报错,造成无法连接?

尝试在 bind 函数前添加 setsockopt 函数增加复用功能,重用本地地址,代码如下
  1.  iRet = setsockopt(sockFd, SOL_SOCKET, SO_REUSEADDR, &iRet, sizeof(int));
  2.     if(iRet < 0){
  3.         fprintf(stderr,"TCP server setsockopt addrreused error!\n");
  4.         return -1;
  5.     }
其中,输入参数内指定 sockFd 为 socket函数创建的套接字, SOL_SOCKET 和 SO_REUSEADDR 为套接字选项、选项名,该组合设置 sockFd 连接允许重用本地地址。
更多扩展知识见:
《 SylixOS 应用开发手册》 15.1.4 章节 ,setsockopt 函数详细使用描述



    • Related Articles

    • UDP 套接字收不到数据的分析与解决方法

      一、复现场景         这个问题是做 SIL 维护软件时遇到的。一个板卡给另外一个板卡发送 UDP 报文。发送端板卡和接收端板卡都有三个 UDP 套接字。此时都能正常收发,但是当接收端板卡有两个套接字不 recvfrom 接收数据,导致另外一个套接字也收不到数据。用 tcpdump 抓包能抓到数据。 二、分析流程         ...
    • SylixOS 中应用程序的 socket address 被占用问题

      问: SylixOS 中应用程序的 socket address 被占用问题,如何处理? [root@sylixos:/apps/test_tool]# ./test_tool & [root@sylixos:/apps/test_tool]# test tool init failed can not bind socket Address already in use. 在应用程序中,如果存在服务器 socket监听时,重启应用程序,常会出现上述 socket 地址被占用的情况,可以通过设置 ...
    • SylixOS NFS server&client 配置操作说明

      Q:SylixOS NFS server&client 配置操作说明 SylixOS端作为服务器: 1. NFS 服务器(sylixos 目标机)端配置: 1)服务器端SylixOS需上传base相关库和文件,base包含unfsd中间件编译; 2)配置本地网络IP及掩码,保证客户端ip同服务器端ip在同一网段; 3)通过命令配置 NFS 相关参数: vi /etc/exports [/media] ipnet=10.4.0.0/255.255.0.0 opt=rw 参数说明: /media ...
    • SylixOS使用的网络协议栈是?

      Q:SylixOS使用的网络协议栈是? SylixOS使用的网络协议栈是 lwip 版本为 v2.1.0。 /** X.x.x: Major version of the stack */ #define LWIP_VERSION_MAJOR 2 /** x.X.x: Minor version of the stack */ #define LWIP_VERSION_MINOR 1 /** x.x.X: Revision of the stack */ #define ...
    • 【网络攻击】阿基里斯测试仪测试导致协议栈崩溃解决办法

      问:【网络攻击】阿基里斯测试仪测试导致协议栈崩溃解决办法 测试方法: 发送 ip fragment 报文,10M 流量,测试报文一直没有最后一片的标志,就是相当于无限分片。 这些报文先把协议栈 pbuf 全部占满了,一直没有释放,在等最后一片或者超时。 所以在测试过程中,协议栈资源一直是满的,无法提供服务。 分析: ( 由源码可知,协议栈针对这个的超时时间应该是 15s ),如果支持无限分片,资源迟早会消耗光 答:修改IP分片