Я занимаюсь программированием сокетов, которые пытаюсь сделать кросс-платформеннымДля систем Windows я включаю следующие заголовки:
#include <winsock2.h>
#include <ws2tcpip.h>
Когда я пытался скомпилировать свое приложение в Windows, я получал ошибки о том, что следующие константы не определены:
IP_RECVOPTS
IP_RECVRETOPTS
Мне это показалось странным, потому что я думал, что это довольно распространенные варианты сокетов, но, возможно, я ошибаюсь.В любом случае, разумеется, они нигде не перечислены в документации по сокетам Windows.
В документации к дистрибутиву Linux in.h
сказано следующее об этих константах:
IP_RECVOPTS /* bool; Receive all IP options w/datagram. */
IP_RECVRETOPTS /* bool; Receive IP options for response. */
Inin.h
этого дистрибутива, определенное значение первого, как представляется, 6, а заданное значение второго - 7.
Итак, мои вопросы:
- Есть ли в сокетах Windows эквивалентные константы для замены этих двух констант (или, может быть, мне просто нужно включить какой-то другой заголовок)?
- Если нет, возможно ли даже получение опций IP в сокетах Windows?
- Если да, то безопасно ли мне жестко кодировать эти значения в системах Windows соответственно 6 и 7 или они должны быть какими-то другими значениями?
ОБНОВЛЕНИЕ 1
Я продолжил свое исследование Google сегодня.Я нашел эти два интересных лакомых кусочка.Я не знаю, помогают ли они мне.Первым является заголовок Windows Runtime (WinRT) Socket Address (WinRTSockAddr.h
) из репозитория MixedRealityToolkit
на официальной учетной записи Microsoft GitHub .Он содержит следующее:
#define IP_RECVOPTS 6
#define IP_RETOPTS 7
Это соответствует * nix-значениям, которые я видел в других местах (я обычно видел IP_RETOPTS
с псевдонимом IP_RECVRETOPTS
).Но есть этот предполагаемый вспомогательный заголовок Windows Sockets из учетной записи GitHub "Geek Research Lab" .Я понятия не имею, имеет ли он какое-либо доверие, но он имеет разные значения для этих констант:
#define IP_RECVOPTS 5 /* bool; receive all IP opts w/dgram */
#define IP_RECVRETOPTS 6 /* bool; receive IP opts for response */
#define IP_RECVDSTADDR 7 /* bool; receive IP dst addr w/dgram */
#define IP_RETOPTS 8 /* ip_opts; set/get IP options */
Это противоречиво на всех фронтах: значения и псевдонимы от IP_RETOPTS
до IP_RECVRETOPTS
.: - /