Поделиться через


Функция обратного вызова LPWSPGETSOCKOPT (ws2spi.h)

Функция LPWSPGetSockOpt извлекает параметр сокета.

Синтаксис

LPWSPGETSOCKOPT Lpwspgetsockopt;

int Lpwspgetsockopt(
  SOCKET s,
  int level,
  int optname,
  char *optval,
  LPINT optlen,
  LPINT lpErrno
)
{...}

Параметры

s

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

level

Уровень, на котором определен параметр; Поддерживаемые уровни включают SOL_SOCKET. (Дополнительные уровни, относящиеся к протоколу, см. в приложении.)

optname

Параметр сокета, для которого требуется извлечь значение.

optval

Указатель на буфер, в котором возвращается значение запрошенного параметра.

optlen

Указатель на размер буфера optval в байтах.

lpErrno

Указатель на код ошибки.

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

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

Код ошибки Значение
WSAENETDOWN
Произошел сбой сетевой подсистемы.
WSAEFAULT
Один из параметров optval или optlen не является допустимой частью адресного пространства пользователя или параметр optlen слишком мал.
WSAEINVAL
Уровень неизвестен или недопустим.
WSAEINPROGRESS
Функция вызывается при выполнении обратного вызова.
WSAENOPROTOOPT
Параметр неизвестен или не поддерживается указанным семейством протоколов.
WSAENOTSOCK
Дескриптор не является сокетом.

Комментарии

Функция LPWSPGetSockOpt извлекает текущее значение параметра сокета, связанного с сокетом любого типа, в любом состоянии, и сохраняет результат в optval. Параметры могут существовать на нескольких уровнях протокола, но они всегда присутствуют на уровне верхнего сокета. Параметры влияют на операции сокета, такие как маршрутизация пакетов и передача данных OOB.

Значение, связанное с выбранным параметром, возвращается в буфере optval. Целое число, на который указывает optlen , должно изначально содержать размер этого буфера; при возврате ему будет задан размер возвращаемого значения. Для SO_LINGER это будет размер структуры, которая задерживается; для большинства других параметров это будет размер целого числа.

Клиент WINDOWS Sockets SPI отвечает за выделение пространства памяти, на которое прямо или косвенно указывает любой из указанных параметров.

Если параметр никогда не был задан с помощью LPWSPSetSockOpt, то LPWSPGetSockOpt возвращает значение по умолчанию для параметра.

Дополнительные сведения о параметрах сокета см. в разделе Параметры сокета.

level = SOL_SOCKET

Значение Тип Значение Default
SO_ACCEPTCONN BOOL Сокет прослушивает через LPWSPListen. ЗНАЧЕНИЕ FALSE , если не выполнено действие LPWSPListen .
SO_BROADCAST BOOL Сокет настраивается для передачи и получения широковещательных сообщений. FALSE
SO_DEBUG BOOL Отладка включена. FALSE
SO_DONTLINGER BOOL Если задано значение true, параметр SO_LINGER отключен. TRUE
SO_DONTROUTE BOOL Маршрутизация отключена. Установка этого параметра сокета выполняется успешно, но игнорируется в AF_INET сокетах; сбой в сокетах AF_INET6 с WSAENOPROTOOPT . Этот параметр не поддерживается в сокетах ATM (это приводит к ошибке). FALSE
SO_ERROR Целое число Извлекает состояние ошибки и очищает его. 0
SO_GROUP_ID GROUP Зарезервировано. Null
SO_GROUP_PRIORITY Целое число Зарезервировано. 0
SO_KEEPALIVE BOOL Keepalives отправляются. Не поддерживается в сокетах ATM (приводит к ошибке). FALSE
SO_LINGER Структура LINGER Возвращает текущие параметры задерживающегося объекта. 1 включен (по умолчанию), 0 — отключен
SO_MAX_MSG_SIZE целое число без знака Максимальный размер сообщения для типов сокетов, ориентированных на сообщения (например, SOCK_DGRAM). Не имеет значения для сокетов, ориентированных на поток. Зависимая от реализации
SO_OOBINLINE BOOL Данные OOB принимаются в обычном потоке данных. FALSE
SO_PROTOCOL_INFO структура WSAPROTOCOL_INFO Описание сведений о протоколе для протокола, привязанного к этому сокету. Зависимая от протокола
SO_RCVBUF Целое число Общее пространство буфера для каждого сокета, зарезервированное для приемок. Это не связано с SO_MAX_MSG_SIZE и не обязательно соответствует размеру окна получения TCP. Зависит от реализации
SO_REUSEADDR BOOL Сокет можно привязать к уже используемому адресу. Этот параметр не применяется к сокетам ATM. FALSE.
SO_SNDBUF Целое число Общее пространство буфера для каждого сокета, зарезервированное для отправки. Это не связано с SO_MAX_MSG_SIZE и не обязательно соответствует размеру окна отправки TCP. Зависит от реализации
SO_TYPE Целое число Тип сокета (например, SOCK_STREAM). Как создано с помощью LPWSPSocket">LPWSPSocket
PVD_CONFIG Зависимость от поставщика услуг Непрозрачный объект структуры данных от поставщика услуг, связанного с сокетами. Этот объект хранит сведения о текущей конфигурации поставщика услуг. Точный формат этой структуры данных зависит от поставщика услуг. Зависит от реализации

 

Вызов LPWSPGetSockOpt с неподдерживаемым параметром приведет к возврату кода ошибки WSAENOPROTOOPT в lpErrno.

SO_DEBUG

Поставщикам служб сокетов Windows рекомендуется (но не обязательно) предоставлять выходные отладочные сведения, если параметр SO_DEBUG задается клиентом SPI сокетов Windows. Механизм создания отладочной информации и форма, которую она принимает, выходят за рамки область данной спецификации.

SO_ERROR

Параметр SO_ERROR возвращает и сбрасывает код ошибки на основе сокета (это не обязательно совпадает с кодом ошибки потока, который поддерживается WS2_32.DLL). Успешный вызов windows Sockets в сокете не сбрасывает код ошибки на основе сокета, возвращенный параметром SO_ERROR.

SO_GROUP_ID

Зарезервировано. Это значение должно иметь значение NULL.

SO_GROUP_PRIORITY

Зарезервировано.

SO_KEEPALIVE

Клиент SPI windows Sockets может запросить у поставщика службы TCP/IP возможность использования пакетов проверки активности при TCP-подключениях, включив параметр сокета SO_KEEPALIVE . Поставщику сокетов Windows не требуется поддержка использования функции поддержания активности. Если это так, точная семантика зависит от реализации, но должна соответствовать разделу 4.2.3.6 ДОКУМЕНТА RFC 1122: Требования к узлам Интернета — уровни связи. (Этот ресурс может быть доступен только на английском языке.) Если подключение разорвано в результате поддержания активности, код ошибки WSAENETRESET возвращается во все вызовы, которые выполняются в сокете, и все последующие вызовы будут завершаться ошибкой с WSAENOTCONN .

SO_LINGER

SO_LINGER управляет действием, выполняемым при постановке неотправленных данных в очередь в сокете и выполнении LPWSPCloseSocket . Описание того, как параметры SO_LINGER влияют на семантику LPWSPCloseSocket , см. в разделе LPWSPCloseSocket. Клиент WINDOWS Sockets SPI получает требуемое поведение, создавая структуру LINGER (на которую указывает параметр optval ) со следующими элементами:

}

SO_MAX_MSG_SIZE

Это параметр сокета только для получения, который указывает максимальный размер исходящего сообщения для типов сокетов, ориентированных на сообщения (например, SOCK_DGRAM), реализованных поставщиком услуг. Он не имеет смысла для сокетов, ориентированных на поток байтов. Подготовка для определения максимального размера входящего сообщения отсутствует.

SO_PROTOCOL_INFOW

Это параметр только для получения, который предоставляет структуру WSAPROTOCOL_INFO , связанную с этим сокетом. Дополнительные сведения об этой структуре см. в разделе WSCEnumProtocols .

SO_SNDBUF

Если поставщик службы сокетов Windows поддерживает параметры SO_RCVBUF и SO_SNDBUF, клиент SPI сокетов Windows может использовать LPWSPSetSockOpt для запроса буферов разных размеров (больше или меньше). Вызов может завершиться успешно, даже если поставщик услуг не сделал доступным всю запрошенную сумму. Клиент WINDOWS Sockets SPI должен вызывать эту функцию с тем же параметром, чтобы проверка фактически предоставленный размер буфера.

SO_REUSEADDR

По умолчанию сокет не может быть привязан (см . раздел LPWSPBind) с локальным адресом, который уже используется. Однако в некоторых случаях может быть желательно повторно использовать адрес таким образом. Так как каждое подключение однозначно определяется сочетанием локальных и удаленных адресов, нет проблем с наличием двух сокетов, привязанных к одному и тому же локальному адресу, если удаленные адреса отличаются. Чтобы сообщить поставщику сокетов Windows о том, что LPWSPBind в сокете должно быть разрешено привязывать к локальному адресу, который уже используется другим сокетом, клиент SPI-сокетов Windows должен задать параметр сокета SO_REUSEADDR для сокета перед выдачей LPWSPBind. Обратите внимание, что параметр интерпретируется только во время LPWSPBind. Поэтому не нужно (но безвредно) устанавливать параметр в сокете, который не должен быть привязан к существующему адресу, и установка или сброс параметра после LPWSPBind не влияет на этот или любой другой сокет.

PVD_CONFIG

Этот параметр извлекает непрозрачный объект структуры данных от поставщика службы, связанного с сокетами. Этот объект хранит сведения о текущей конфигурации поставщика услуг. Точный формат этой структуры данных зависит от поставщика услуг.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Верхняя часть ws2spi.h

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

LPWSPSetSockOpt

LPWSPSocket