如何避免通过 CFSocketSendData
将数据发送到无效的套接字?
我尝试用 CFSockerIsValid
确定套接字状态,但是这个方法
当另一侧关闭时返回仍然为真。
如何确定套接字是否有效?为了避免错误。
最佳答案
如果另一方关闭套接字,您的回调(您在 CFSocketCreate 中指定)将被调用,回调类型为 kCFSocketDataCallBack,但数据将为空。像这样测试它:
void SocketCallback (CFSocketRef s, CFSocketCallBackType callbackType,
CFDataRef address, const void *data, void *info)
{
if (callbackType == kCFSocketDataCallBack) {
NSData *nsData = (NSData *)data;
if (nsData.length == 0) {
NSLog(@"got kCFSocketDataCallBack, but with 0 bytes -- connection terminated");
// do whatever you want to do here when connection is dropped
}
} else {
NSLog(@"SocketCallback type %d", callbackType);
}
}
您可以在那里设置一个标志并使用它来知道您的连接已断开,然后当您写入断开的连接时,尝试重新连接或通知用户或任何您想做的事情。
关于iphone - 如何确定无效的 CFSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/893013/