将 wifi 切换到 3g iOS posix 套接字时,有时套接字会死机

Sometimes socket dies when switching wifi to 3g iOS posix sockets

我在网上进行了大量搜索,但没有找到一个好的答案。

我正在 iOS/Android 上使用 posix 套接字用 C++ 编写基于套接字的应用程序。

当从 wifi->3g 切换时,有时 当 reading/writing.

时,套接字会死掉而不会出现任何错误

我可以在 iOS 上使用可达性 API(以及 android 上的类似功能)来检测网络何时切换。

发生这种情况时我是destroying/recreating套接字。问题是如果套接字还活着,服务器将在我关闭套接字时收到信号。如果服务器收到关闭信号,它会假定客户端有意断开连接并通知其他人,这不是我想要的。如果套接字死了,服务器就收不到这个信号,一切正常。

其他人如何处理这种情况?我真的不想用超时来检测这个。

为什么它有时也会死?我怎么知道套接字实际上已经死了?

为了解决这个问题,这就是我正在采用的方法。

切换网络时,我向服务器发送一个 ping 和重新连接数据包,并创建一个新套接字。

谁先响应,我就关闭另一个连接。

也需要对服​​务器端进行一些更改才能正确处理此问题