我正在学习如何使用Apple的安全传输框架为我的网络实现TLS,这有点令人困惑。我相信应该将我的套接字fds强制转换为SSLConnectionRefs,但是这样做时会收到警告Cast to 'SSLConnectionRef' (aka 'const void *') from smaller integer type 'int'
。
int sockfd = socket(...);
...
SSLContextRef sslContext = SSLCreateContext(...);
// This line gives the warning
SSLSetConnection(sslContext, (SSLConnectionRef)sockfd);
我在这里不会丢失任何信息,因为void *
它大于int
,对吗?因此,这应该是安全的。我只是担心编译器警告。感谢您的任何建议。
(SSLConnectionRef)(long)sockfd
只要sizeof(void*) > sizeof(int)
对当前的所有编译器都适用,那么它就可以工作并且应该是安全的,但不一定可以保证。
另一种方法是暂时禁用警告:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wint-to-point-cast"
SSLSetConnection(sslContext, (SSLConnectionRef)sockfd);
#pragma clang diagnostic pop
最终,“正确”的解决方案将是实际上传递一个指针,该指针指向您通过malloc或其他方案分配的整数。如果这全部在一个对象中,则将fd存储在一个实例变量中,并传入&_sockfd;。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句