如何在没有警告的情况下将套接字转换为SSLConnectionRef?

格雷格

我正在学习如何使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在没有警告/错误的情况下将数组转换为ArrayList?

如何在没有'new'关键字的情况下将JS代码转换为Kotlin

如何在没有大文件大小的情况下将JPG转换为PDF?

如何在没有时区偏移的情况下将日期转换为毫秒?

如何在没有Onehot编码的情况下将行数据转换为列

如何在没有列标题的情况下将pandas数据框转换为字典?

如何在没有全新系统说明的情况下将Ubuntu转换为LXDE?

如何在没有GROUP_CONCAT的情况下将行转换为列?

如何在没有任何模块的情况下将日历日期转换为顺序日期

如何在没有可用库函数的情况下将列转换为行 (Python)

如何在没有未经检查的强制转换警告的情况下从通配符转换为通用返回类型

如何在没有收到TCP套接字的情况下检查是否有传入数据?

如何在没有文件路径的情况下嗅探unix dgram套接字?

在没有警告的情况下将“ void *”转换为int

在没有警告的情况下将字符串转换为枚举

如何在没有parseFloat或强制转换的情况下将字符串转换为javascript中的float?

如何在不触发警告的情况下将整数值转换为指针地址

如何在没有警告的情况下强制转换java.lang.Class <?>类型的对象?

如何在没有ffmpeg的情况下将python上的视频转换为.mp4?

如何在没有科学记数法的情况下将long转换为字符串

如何在没有物理 HTML 文件的情况下将 PHP Convertapi HTML 转换为 PDF

如何在没有毫秒的情况下将日期时间字符串转换为日期时间 pyspark

如何在没有任何框架的情况下将 json 文件转换为字典 c#。.Net 3.5

我如何在没有增强的情况下将C ++ 11代码转换为C ++ 98?

如何在没有boost_timer的情况下将boost :: asio代码完全转换为C ++ 11 / asio?

如何在没有.toCharArray实例方法的情况下将字符串转换为字符数组

如何在没有任何库方法的情况下将字符串的 ArrayList 转换为整数?

如何在没有托管ZPL打印机的情况下将ZPL命令转换为图像

如何在没有方法的情况下将Angular $ resource对象转换为常规对象