【问题标题】:QUdpSocket setSockOptQUdpSocket setSockOpt
【发布时间】:2014-03-22 03:26:07
【问题描述】:

我有一些旧代码,在套接字中使用了这个标志:

unsigned char str_optval [8] = {0xfc, 0x08, 0xff, 0x33, 0xcc, 0xff, 0xaa, 0x0};
res=setsockopt(sid,SOL_IP,IP_OPTIONS, (char*)&str_optval,sizeof(str_optval));

如何更改此位置以使用 QUdpSocket?我在 QUdpClass 中找不到任何模拟 setsockopt。 QAbstractSocket 提供 setSocketOption,它只允许 4 个变体标志(枚举)。我只需要 linux 版本,所以如果有任何原生 func 就可以了。

【问题讨论】:

  • 您可能只需要继续使用setsockopt。只需从QUdpSocket 获取套接字描述符。参考QAbstractSocket::socketDescriptor()

标签: qt udp qudpsocket


【解决方案1】:

http://qt-project.org/doc/qt-5.0/qtnetwork/qabstractsocket.html#SocketOption-enum

套接字选项不限于 UDP 数据报。话虽如此,Qt 只能在套接字上设置有限数量的选项。实际能够设置的最常见选项。其余的是平台特定的东西。

ASIDE:硬编码文字,就像你引用的代码一样,是一个很大的禁忌。非便携式和维护的噩梦。无论您做什么,至少将这些文字更改为标准标题中定义的名称。

【讨论】:

  • 旁白:这就是我开始重构的原因。我不知道 hex consts )) 是什么意思
  • 如果这是针对 Linux 的,您可以查看 /usr/include/bits/in.h 中的套接字选项。看来这代表的实际结构是 struct ip_opts { struct in_addr ip_dst; /* 第一跳;零无源路由。 /char ip_opts[40]; / 实际上大小可变。 */ };祝你好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多