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


Функция обратного вызова 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 доступен определенный код ошибки.

Код ошибки Значение
WSAENETDOWN
Произошел сбой сетевой подсистемы.
WSAEFAULT
Optval не находится в допустимой части адресного пространства процесса или параметр optlen слишком мал.
WSAEINPROGRESS
Функция вызывается при выполнении обратного вызова.
WSAEINPROGRESS
Выполняется блокировка вызова сокетов Windows или поставщик услуг по-прежнему обрабатывает функцию обратного вызова.
WSAEINVAL
Недопустимый уровень или недопустимые сведения в optval.
WSAENETRESET
Подключение было разорвано из-за активности активности при обнаружении сбоя во время выполнения операции.
WSAENOPROTOOPT
Параметр неизвестен или не поддерживается для указанного поставщика.
WSAENOTCONN
Подключение сбрасывается при установке SO_KEEPALIVE .
WSAENOTSOCK
Дескриптор не является сокетом.

Комментарии

Функция 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

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

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 , со следующими элементами.

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

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

LPWSPBind

LPWSPEventSelect

LPWSPGetSockopt

LPWSPIoctl

LPWSPSocket