параметр сокета IPV6_PKTINFO

Параметр сокета IPV6_PKTINFO позволяет приложению включать или отключать возврат сведений о пакетах функцией LPFN_WSARECVMSG (WSARecvMsg) в сокете IPv6.

Чтобы запросить состояние этого параметра сокета, вызовите функцию getsockopt . Чтобы задать этот параметр, вызовите функцию setsockopt со следующими параметрами.

Значение параметра сокета

Константой, представляющей этот параметр сокета, является 19.

Синтаксис

int getsockopt(
  (SOCKET) s,      // descriptor identifying a socket 
  (int) IPPROTO_IPV6,   // level
  (int) IPV6_PKTINFO, // optname
  (char *) optval, // output buffer,
  (int) optlen,  // size of output buffer
);
int setsockopt(
  (SOCKET) s,      // descriptor identifying a socket 
  (int) IPPROTO_IPV6,   // level
  (int) IPV6_PKTINFO, // optname
  (char *) optval, // input buffer,
  (int) optlen,  // size of input buffer
);

Параметры

s [in]

Дескриптор, определяющий сокет.

level [in]

Уровень, на котором определен параметр. Используйте IPPROTO_IPV6 для этой операции.

optname [in]

Параметр сокета, для которого необходимо получить или задать значение. Для этой операции используйте IPV6_PKTINFO.

optval [out]

Указатель на буфер, содержащий значение заданного параметра. Этот параметр должен указывать на буфер, равный или превышающий размер значения DWORD .

Это значение обрабатывается как логическое значение с 0, которое используется для обозначения FALSE (отключено), а ненулевое значение — значение TRUE (включено).

optlen [in, out]

Указатель на размер буфера optval в байтах. Этот размер должен быть равен или больше размера значения DWORD .

Возвращаемое значение

Если операция завершается успешно, функция getsockopt или setsockopt возвращает ноль.

Если операция завершается сбоем, возвращается значение SOCKET_ERROR и можно получить определенный код ошибки, вызвав WSAGetLastError.

Код ошибки Значение
WSANOTINITIALISED
Перед использованием этой функции должен быть выполнен успешный вызов WSAStartup .
WSAENETDOWN
Произошел сбой сетевой подсистемы.
WSAEFAULT
Один из параметров optval или optlen указывает на память, которая не находится в допустимой части адресного пространства пользователя. Эта ошибка также возвращается, если значение, указываемое параметром optlen , меньше размера значения DWORD .
WSAEINPROGRESS
Выполняется блокирующий вызов Windows Sockets 1.1 или поставщик услуг по-прежнему обрабатывает функцию обратного вызова.
WSAEINVAL
Указан недопустимый аргумент. Эта ошибка возвращается, если параметр уровня неизвестен или недопустим. В Windows Vista и более поздних версиях эта ошибка также возвращается, если сокет находился в переходном состоянии.
WSAENOPROTOOPT
Параметр неизвестен или не поддерживается указанным семейством протоколов. Эта ошибка возвращается, если параметр типа для дескриптора сокета, переданный в параметре s , не был SOCK_DGRAM или не SOCK_RAW.
WSAENOTSOCK
Дескриптор не является сокетом.

 

Комментарии

Функция getsockopt , вызываемая с параметром сокета IPV6_PKTINFO, позволяет приложению определить, должна ли функция LPFN_WSARECVMSG (WSARecvMsg) возвращать сведения о пакете для сокета IPv6.

Функция setsockopt, вызываемая с параметром сокета IPV6_PKTINFO, позволяет приложению включать или отключать возврат сведений о пакетах функцией LPFN_WSARECVMSG (WSARecvMsg). Параметр IPV6_PKTINFO для сокета по умолчанию отключен (имеет значение FALSE).

Если этот параметр сокета включен в сокете IPv6 типа SOCK_DGRAM или SOCK_RAW, функция LPFN_WSARECVMSG (WSARecvMsg) возвращает сведения о пакете в структуре WSAMSG , на которую указывает параметр lpMsg . Один из объектов контрольных данных в возвращаемой структуре WSAMSG будет содержать in6_pktinfo структуру, используемую для хранения сведений об адресе полученного пакета.

Для датаграмм, полученных функцией LPFN_WSARECVMSG (WSARecvMsg) по протоколу IPv6, элемент Control полученной структуры WSAMSG будет содержать структуру WSABUF , содержащую структуру WSACMSGHDR . Элемент cmsg_level этой структуры WSACMSGHDR будет содержать IPPROTO_IPV6, элемент cmsg_type этой структуры будет содержать IPV6_PKTINFO, а элемент cmsg_data будет содержать in6_pktinfo структуру, используемую для хранения сведений об адресах полученных пакетов IPv6. IPv6-адрес в структуре in6_pktinfo — это IPv6-адрес, с которого был получен пакет.

Для сокета datagram с двумя стеками, если приложению требуется функция LPFN_WSARECVMSG (WSARecvMsg) для возврата сведений о пакете в структуре WSAMSG для датаграмм, полученных по протоколу IPv4 , IP_PKTINFO параметр сокета должен иметь значение true в сокете. Если в сокете задано значение true только для параметра IPV6_PKTINFO, сведения о пакетах будут предоставляться для датаграмм, полученных по протоколу IPv6, но могут не предоставляться для датаграмм, полученных по протоколу IPv4.

Обратите внимание, что файл заголовка Ws2ipdef.h автоматически включается в Ws2tcpip.h и никогда не должен использоваться напрямую.

Требования

Требование Значение
Минимальная версия клиента
Windows XP [только классические приложения]
Минимальная версия сервера
Windows Server 2003 [только классические приложения]
Заголовок
Ws2ipdef.h (включая Ws2tcpip.h)

См. также раздел

Сокеты с двойным стеком

getsockopt

in6_pktinfo

IP_PKTINFO

Параметры сокета IPPROTO_IPV6

setsockopt

Сокета

WSAMSG

LPFN_WSARECVMSG (WSARecvMsg)