iphone - 如何确定无效的 CFSocket

标签 iphone objective-c sockets

如何避免通过 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/

相关文章:

sockets - 你能在 Windows 上 close()、read() 和 write() 套接字吗?

iphone - 是否有任何第三方工具可以为 armv6/armv7 创建静态库?

ios - 智能地滚动图像

c++ - 通过套接字 C++ 从设备接收消息

ios - 带有 NSFetchedResultsController 的 UITableView 不会第二次加载

iPhone 应用程序崩溃 - NSZombie 输出问题

iphone - 如何在后台线程上运行CFSocket以获得更准确的ping时间?

ios - 通过用户交互通过 VR 眼镜显示 3d 对象

iphone - 按顺序更改 UIImageView 中的图像

iphone - 检测导航 Controller 何时弹出到根目录