当TCP和UDP使用的fd描述符是同一个时,会发生什么?

    最近在一个项目中遇到了一个非常奇葩的问题,简单来说就是程序会创建一条tcp客户端连接与tcp服务端通信,另外还有一个udp用来组播发送报文。 现在遇到的问题是不知道什么原因,tcp和udp通过socket接口返回的描述符竟然是一样的,结果就会导致不管是tcp调用send还是udp调用sendto,实际上报文都是发送到了tco服务端,最终就会导致tcp服务端认为tcp客户端存在问题,会主动将连接close掉。导致tcp客户端一直不停的重连,连正常的报文通信都会受到影响。因为出现这种情况后,即使close掉了tcp的描述符,再次调用socket接口返回的描述符大概率还是跟之前的一样。

    目前出现这种现象后,只有重启程序才可能恢复正常,因此在创建tcp描述符时,特地做了一次判断,是否跟udp描述符(udp描述符只在初始化socket一次,不会再变化)一致,如果一致就直接退出程序,让看门狗自动重启程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值