TCP-server端异常关闭后无法再次连接

最近学习测试 TCP 通信,发现在服务器和客户端正常通信时,手动异常关闭 server 端进程,再次运行开启 server 端程序会在 bind 函数位置报错,造成无法连接。

 

查阅资料后发现应该是地址或端口冲突了,尝试在 bind 函数前添加 setsockopt 函数增加复用功能,代码如下

 iRet = setsockopt(sockFd, SOL_SOCKET, SO_REUSEADDR, &iRet, sizeof(int));
    if(iRet < 0){
        fprintf(stderr,"TCP server setsockopt addrreused error!\n");
        return -1;
    }

其中,输入参数内指定 sockFd 为 socket函数创建的套接字,SOL_SOCKET 和 SO_REUSEADDR 为套接字选项、选项名,该组合设置 sockFd 连接允许重用本地地址。

经过修改测试,重用本地端口未能解决该问题,设置重用本地地址可以解决。

关于 setsockopt 函数的描述解析见:https://blog.csdn.net/Liangren_/article/details/115197754

猜你喜欢

转载自blog.csdn.net/Liangren_/article/details/115196966