параметр сокета 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.
Код ошибки | Значение |
---|---|
Перед использованием этой функции должен быть выполнен успешный вызов WSAStartup . |
|
Произошел сбой сетевой подсистемы. |
|
Один из параметров optval или optlen указывает на память, которая не находится в допустимой части адресного пространства пользователя. Эта ошибка также возвращается, если значение, указываемое параметром optlen , меньше размера значения DWORD . |
|
Выполняется блокирующий вызов Windows Sockets 1.1 или поставщик услуг по-прежнему обрабатывает функцию обратного вызова. |
|
Указан недопустимый аргумент. Эта ошибка возвращается, если параметр уровня неизвестен или недопустим. В Windows Vista и более поздних версиях эта ошибка также возвращается, если сокет находился в переходном состоянии. |
|
Параметр неизвестен или не поддерживается указанным семейством протоколов. Эта ошибка возвращается, если параметр типа для дескриптора сокета, переданный в параметре s , не был SOCK_DGRAM или не SOCK_RAW. |
|
Дескриптор не является сокетом. |
Комментарии
Функция 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 [только классические приложения] |
Заголовок |
|
См. также раздел