Функция обратного вызова 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 доступен определенный код ошибки.
Код ошибки | Значение |
---|---|
Произошел сбой сетевой подсистемы. | |
Один из параметров optval или optlen не является допустимой частью адресного пространства пользователя или параметр optlen слишком мал. | |
Уровень неизвестен или недопустим. | |
Функция вызывается при выполнении обратного вызова. | |
Параметр неизвестен или не поддерживается указанным семейством протоколов. | |
Дескриптор не является сокетом. |
Комментарии
Функция 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
-
Зарезервировано.
-
Клиент 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 См. также раздел