本文主要是介绍当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一次,不会再变化)一致,如果一致就直接退出程序,让看门狗自动重启程序。
这篇关于当TCP和UDP使用的fd描述符是同一个时,会发生什么?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!