linux下位机出现使用TCP socket为0的问题

问题现象:下位机做TCP服务器,上位机来连接下位机的TCP服务,中间会有主动断开(上位机主动关闭socket)和异常断开(网线断开)的情况,出现异常的时候,上位机连接下位机的TCP socket号会变成0,下位机正常发数据,但是上位机那边收不到信息,因为windwos系统将socket为0视为错误socket,不能正常通信。

问题分析:不用纠结windows为啥不能使用socket为0通信了(linux可以使用socket为0通信),

应该分析为啥socket会出现0的异常情况。

产生原因:1.**在Linux中,socket 0和1通常用于标准输入输出重定向。**‌ Socket 0和1分别代表标准输入(stdin)和标准输出(stdout),它们用于重定向标准输入输出流。linux系统默认会打开0和1的socket。

2.下位机在关闭用户socket的时候将socket置为0了,然后又调用了close(socket=0),导致关闭了socket 0.

3.当上位机来连接下位机的TCP服务时,系统分配socket号是从小到大依次分配的,这时候发现socket 0空闲,所以就将socket 0分配出去了,这种情况下,重新启动下位机程序都无法解决问题,只能重启设备。

解决办法:1.close socket以后,将socket置为-1这个非正常值,千万不能置为0.

2.当再次调用关闭socket函数的时候,先判断socket>0,再进行close操作。

总结:tcp使用不当,关闭了系统使用的socket 0,再次创建socket的时候,系统分配了socket 0引发的问题。初始化和清空变量的时候要考虑变量的有效值。

相关推荐
食咗未2 分钟前
Linux microcom工具的使用
linux·运维·服务器·驱动开发·串口调试
十五年专注C++开发6 分钟前
CMake基础:foreach详解
linux·c++·windows·cmake·跨平台编译
YYYing.8 分钟前
【计算机网络 | 第四篇】路由与NAT技术
运维·服务器·网络·网络协议·计算机网络
科技块儿8 分钟前
【游戏防外挂】同一IP多账号登录?IP地址查询定位快速识别工作室
网络协议·tcp/ip·游戏
天骄t11 分钟前
UART通信全解析:从原理到实战
linux·单片机
感觉不怎么会14 分钟前
ubuntu - 搭建TR069平台问题(Open ACS)
linux·运维·ubuntu
Xの哲學26 分钟前
Linux Worklet 深入剖析: 轻量级延迟执行机制
linux·服务器·网络·数据结构·算法
oh,huoyuyan33 分钟前
火语言RPA随机访问网址 + 随机时长停留 自动化循环案例分享
运维·自动化·rpa
宴之敖者、35 分钟前
Linux——初始Linux系统
linux·运维·服务器
独自破碎E38 分钟前
在Linux系统中如何使用ssh进行远程登录?
linux·运维·ssh