如何确定无效的CFSocket

时间:2009-05-21 13:46:58

标签: iphone objective-c sockets

如何通过CFSocketSendData将数据发送到无效的套接字? 我试图用CFSockerIsValid确定套接字状态,但这种方法 当另一方接近时,它仍然是真的。

如何确定套接字是否有效?为了避免错误。

1 个答案:

答案 0 :(得分:3)

如果另一方关闭了套接字,你的回调(你在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);
    }

}

您可以在那里设置一个标志并使用它来知道您的连接已被删除,然后当您写入已断开的连接时,尝试重新连接或通知用户或您想要做的任何事情。