Функция обратного вызова LPWSPSETSOCKOPT (ws2spi.h)
Функция LPWSPSetSockOpt задает параметр сокета.
Синтаксис
LPWSPSETSOCKOPT Lpwspsetsockopt;
int Lpwspsetsockopt(
[in] SOCKET s,
[in] int level,
[in] int optname,
[in] const char *optval,
[in] int optlen,
[out] LPINT lpErrno
)
{...}
Параметры
[in] s
Дескриптор, идентифицирующий сокет.
[in] level
Уровень, на котором определен параметр; Поддерживаемые уровни включают SOL_SOCKET. Дополнительные сведения см. в разделе Приложения Winsock.
[in] optname
Параметр сокета, для которого необходимо задать значение.
[in] optval
Указатель на буфер, в котором указано значение запрошенного параметра.
[in] optlen
Размер буфера optval (в байтах).
[out] lpErrno
Указатель на код ошибки.
Возвращаемое значение
Если ошибка не возникает, функция LPWSPSetSockOpt возвращает ноль. В противном случае возвращается значение SOCKET_ERROR , а в lpErrno доступен определенный код ошибки.
Код ошибки | Значение |
---|---|
Произошел сбой сетевой подсистемы. | |
Optval не находится в допустимой части адресного пространства процесса или параметр optlen слишком мал. | |
Функция вызывается при выполнении обратного вызова. | |
Выполняется блокировка вызова сокетов Windows или поставщик услуг по-прежнему обрабатывает функцию обратного вызова. | |
Недопустимый уровень или недопустимые сведения в optval. | |
Подключение было разорвано из-за активности активности при обнаружении сбоя во время выполнения операции. | |
Параметр неизвестен или не поддерживается для указанного поставщика. | |
Подключение сбрасывается при установке SO_KEEPALIVE . | |
Дескриптор не является сокетом. |
Комментарии
Функция LPWSPSetSockOpt задает текущее значение параметра сокета, связанного с сокетом любого типа в любом состоянии. Хотя параметры могут существовать на нескольких уровнях протокола, они всегда присутствуют на верхнем уровне сокета. Параметры влияют на операции сокета, например на возможность отправки широковещательных сообщений в сокет.
Существует два типа параметров сокета: логические параметры, которые позволяют включать или отключать функцию или поведение, и параметры, требующие целочисленного значения или структуры. Чтобы включить логический параметр, optval указывает на ненулевое целое число. Чтобы отключить этот параметр, optval указывает на целое число, равное нулю. Параметр optlen должен быть равен sizeof (int) для логических параметров. Для других параметров optval указывает на целое число или структуру, которая содержит нужное значение для параметра, а optlen — это длина целого числа или структуры.
Дополнительные сведения о параметрах сокета см. в разделе Параметры сокета.
level = SOL_SOCKET
Значение | Тип | Значение |
---|---|---|
SO_BROADCAST | BOOL | Включает передачу и получение широковещательных сообщений в сокете. |
SO_DEBUG | BOOL | Записывает сведения об отладке. |
SO_DONTLINGER | BOOL | Зарезервировано. |
SO_DONTROUTE | BOOL | Отключенная маршрутизация: отправка непосредственно в интерфейс. Установка этого параметра сокета выполняется успешно, но игнорируется в AF_INET сокетах; сбой в сокетах AF_INET6 с WSAENOPROTOOPT . Этот параметр не поддерживается в сокетах ATM (это приводит к ошибке). |
SO_GROUP_PRIORITY | INT | Зарезервировано. |
SO_KEEPALIVE | BOOL | Посылает храняйки. Не поддерживается в сокетах ATM (приводит к ошибке). |
SO_LINGER | struct linger | Задерживается при закрытии при наличии неотправленных данных. |
SO_OOBINLINE | BOOL | Получает данные OOB в обычном потоке данных. |
SO_RCVBUF | INT | Задает общий размер буферного пространства сокета, которое зарезервировано для приема. Это не связано с SO_MAX_MSG_SIZE и не обязательно соответствует размеру окна получения TCP. |
SO_REUSEADDR | BOOL | Позволяет ограничить сокет, разрешив только тот адрес, который уже используется. (См. раздел Привязка.) Неприменимо к сокетам ATM. |
SO_SNDBUF | INT | Задает общий размер буферного пространства сокета, которое зарезервировано для отправки. Это не связано с SO_MAX_MSG_SIZE и не обязательно соответствует размеру окна отправки TCP. |
PVD_CONFIG | Зависимость от поставщика услуг | Этот объект хранит сведения о конфигурации для поставщика служб, связанного с сокетами. Точный формат этой структуры данных зависит от поставщика услуг. |
Вызов LPWSPGetSockopt с неподдерживаемым параметром приведет к возврату кода ошибки WSAENOPROTOOPT в lpErrno.
-
SO_DEBUG
-
Поставщикам служб Сокетов Windows рекомендуется, но не требуется предоставлять выходные отладочные сведения, если параметр SO_DEBUG задан клиентом SPI сокетов Windows. Механизм создания отладочной информации и формат выходят за рамки область этой спецификации.
-
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 , со следующими элементами.
struct linger { u_short l_onoff; u_short l_linger; }
Чтобы включить SO_LINGER, клиент WINDOWS Sockets SPI должен задать для l_onoff ненулевое значение, задать для l_linger нулевое или требуемое время ожидания (в секундах) и вызвать LPWSPSetSockOpt. Чтобы включить SO_DONTLINGER, то есть отключить SO_LINGER, l_onoff должно быть равно нулю, и необходимо вызвать LPWSPSetSockOpt . Имейте в виду, что не рекомендуется включать SO_LINGER с ненулевым тайм-аутом в неблокивном сокете. Дополнительные сведения см. в разделе LPWSPCloseSocket.
Включение SO_LINGER также отключает SO_DONTLINGER и наоборот. Имейте в виду, что если SO_DONTLINGER отключен (то есть включена SO_LINGER ), то значение времени ожидания не указано. В этом случае используемое время ожидания зависит от реализации. Если для сокета было установлено предыдущее время ожидания (путем включения SO_LINGER), это значение времени ожидания должно быть восстановлено поставщиком услуг.
-
SO_REUSEADDR
-
По умолчанию сокет не может быть привязан (дополнительные сведения см. в разделе LPWSPBind) к уже используемому локальному адресу. Однако в некоторых случаях может быть желательно повторно использовать адрес таким образом. Так как каждое подключение уникально идентифицируется сочетанием локальных и удаленных адресов, нет проблем с наличием двух сокетов, привязанных к одному и тому же локальному адресу, если удаленные адреса отличаются. Чтобы сообщить поставщику сокетов Windows о том, что LPWSPBind в сокете должно быть разрешено привязывать к локальному адресу, который уже используется другим сокетом, клиент Windows Sockets SPI должен задать параметр SO_REUSEADDR сокета для сокета перед выдачей LPWSPBind. Имейте в виду, что параметр интерпретируется только во время LPWSPBind: поэтому ненужно, но безвредно устанавливать параметр в сокете, который не должен быть привязан к существующему адресу, а установка или сброс параметра после LPWSPBind не влияет на этот или любой другой сокет.
-
SO_SNDBUF
-
Если реализация сокетов Windows поддерживает параметры SO_RCVBUF и SO_SNDBUF , клиент SPI Сокетов Windows может запрашивать буферы разных размеров (больше или меньше). Вызов может завершиться успешно, даже если поставщик услуг не сделал доступным всю запрошенную сумму. Клиент SPI сокетов Windows должен вызвать LPWSPGetSockopt с тем же параметром, чтобы проверить фактически предоставленный размер буфера.
-
PVD_CONFIG
-
Этот объект хранит сведения о конфигурации для поставщика служб, связанного с сокетами. Точный формат этой структуры данных зависит от поставщика услуг.
Требования
Требование Значение Минимальная версия клиента Windows 2000 Professional [только классические приложения] Минимальная версия сервера Windows 2000 Server [только классические приложения] Верхняя часть ws2spi.h См. также раздел