我在 macOS 应用程序中使用 Unix 域套接字,但我的 CFSocketRef 在某些时候变得陈旧,然后在任何调用时崩溃。任何解决方案?
I am using Unix Domain sockets in a macOS application, but my CFSocketRef at some point becomes stale, then crashes on any call. Any solution?
我在 Objective-C macOS 项目中使用 Unix 域套接字,使用 this 非常好的答案。答案提供了完整的class搭建socket客户端和服务端。目前我只对客户端功能感兴趣。通信运行良好,但在短时间后 CFSocketRef 变得陈旧,并且在有可用数据时不再触发回调函数。对 CFSocketRef 上的任何函数的任何后续调用都会导致崩溃,例如:
return (BOOL)CFSocketIsValid( self.sockRef );
崩溃日志说:
Expected typeID 61 (CFSocket) does not match actual typeID 0 (<unknown>)
我试过这样更新代码:
CFTypeID typeID = CFGetTypeID(self.sockRef);
if (typeID != 61) {
NSLog(@"Here we are.");
}
通常情况下,类型为 61 并且可以正常工作,但在变得陈旧之后,它会在调用 CFGetTypeID 时崩溃。我在 Core Foundation 方面不是很有经验,有经验的人可以向我建议调试策略或解决方案吗?非常感谢
我找不到问题中描述的崩溃的解释,但我改变了方法,我发现 CocoaAsyncSocket 也可以用作 Unix 域套接字连接的包装器,它也来自带有一个名为 DomainTest 的完整示例。我强烈建议使用它来避免直接调用 CoreFoundation 调用,因为它是一个出色的库,具有公认的稳定性。我现在已经在我的项目中使用了它,并且没有再发生崩溃。感谢您的关注。
编辑:
我从 Chilkat software, which is a paid library. They have very good examples like this, that perfectly fits my purpose. You can find more information about their CkoSocket class here 中发现了另一个很好的解决方案。再次感谢您的关注。
我在 Objective-C macOS 项目中使用 Unix 域套接字,使用 this 非常好的答案。答案提供了完整的class搭建socket客户端和服务端。目前我只对客户端功能感兴趣。通信运行良好,但在短时间后 CFSocketRef 变得陈旧,并且在有可用数据时不再触发回调函数。对 CFSocketRef 上的任何函数的任何后续调用都会导致崩溃,例如:
return (BOOL)CFSocketIsValid( self.sockRef );
崩溃日志说:
Expected typeID 61 (CFSocket) does not match actual typeID 0 (<unknown>)
我试过这样更新代码:
CFTypeID typeID = CFGetTypeID(self.sockRef);
if (typeID != 61) {
NSLog(@"Here we are.");
}
通常情况下,类型为 61 并且可以正常工作,但在变得陈旧之后,它会在调用 CFGetTypeID 时崩溃。我在 Core Foundation 方面不是很有经验,有经验的人可以向我建议调试策略或解决方案吗?非常感谢
我找不到问题中描述的崩溃的解释,但我改变了方法,我发现 CocoaAsyncSocket 也可以用作 Unix 域套接字连接的包装器,它也来自带有一个名为 DomainTest 的完整示例。我强烈建议使用它来避免直接调用 CoreFoundation 调用,因为它是一个出色的库,具有公认的稳定性。我现在已经在我的项目中使用了它,并且没有再发生崩溃。感谢您的关注。
编辑:
我从 Chilkat software, which is a paid library. They have very good examples like this, that perfectly fits my purpose. You can find more information about their CkoSocket class here 中发现了另一个很好的解决方案。再次感谢您的关注。