BOOL SetSockOpt ( int nOptionName, const void * lpOptionValue, int nOptionLen, int nLevel = SOL_SOCKET );
Возвращаемое значение
Ненулевое значение, если функция выполнена успешно; в противном случае 0 и код ошибки можно получить, вызвав функцию GetLastError. Следующие ошибки применяются к этой функции-члена:
Параметры
nOptionName
Параметр сокета, для которого устанавливается значение.
lpOptionValue
Указатель на буфер, в котором предоставляется значение запрошенного варианта.
nOptionLen
Размер lpOptionValue буфера в байтах.
nLevel
Уровень, на котором определен параметр; единственным поддерживаемым уровни являются SOL_SOCKET и IPPROTO_TCP.
Примечания
Вызов этой функции-члена для задания параметра socket. SetSockOpt устанавливает текущее значение для параметра сокета, связанные с socket любого типа в любом государстве. Параметры могут существовать на различных уровнях протокол, но эта спецификация только определяет параметры, которые существуют на уровне верхней «гнездо». Параметры влияют на сокет такие операции, как срочные данные получают ли в потоке обычных данных ли широковещательные сообщения могут быть отправлены на сокет и так далее.
Существует два типа параметров сокета: Boolean, включить или отключить функцию или поведение и которые требуют целочисленное значение или структуры. Чтобы задать логический параметр, lpOptionValue указывает на ненулевой целое число. Чтобы отключить параметр lpOptionValue указывает на целое равны нулю. nOptionLen должно быть равным sizeof(BOOL) для логических параметров. Для других вариантов lpOptionValue указывает целое число или структуру, содержащую нужное значение для параметра и nOptionLen — длина целого числа или структуры.
SO_LINGER управляет меры, когда очередь неотправленных данных на сокете и вызывается функция Закрыть для закрытия объекта socket. Для получения дополнительной информации, смотрите Соображения программирования Windows Sockets в документации Win32 SDK.
По умолчанию объект socket нельзя присоединить (см. Привязка) к локальному адресу, который уже используется. Иногда Однако, она может желательно «повторное» адрес таким образом. Так как каждая связь однозначно идентифицируется сочетанием локальных и удаленных адресов, нет никаких проблем с тем, что две розетки, обязан же локальный адрес, пока удаленные адреса разные.
Для информирования выполнения Windows Sockets не быть запрещено связывать звонок на сокете, потому что требуемый адрес уже используется в другом сокет, приложение параметр SO_REUSEADDR сокета для сокета до выдачи связывать звонок. Обратите внимание, что параметр интерпретируется только во время вызова привязки : Поэтому нет необходимости (но безвредны) для задания параметра на сокет, который не должен быть привязан к существующий адрес, и установка или сброс параметра после связывания звонок не влияет на этот или любой другой разъем.
Приложение может запросить выполнение Windows Sockets дают возможность использовать «keep-alive» пакетов на подключениях протокол управления передачей (TCP), включив параметр сокета SO_KEEPALIVE . (Сведения о «keep-alive» пакетах содержатся в разделе Соображения программирования Windows Sockets в документации Win32 SDK.) Реализация Windows Sockets нужно не поддерживает использование активность: если это так, точной семантики конкретные реализации, но должны соответствовать разделу 4.2.3.6 RFC 1122: "требования к Интернет-хостов-коммуникационные слои." Если в результате разрыве соединения из «активность» код ошибки WSAENETRESET возвращается все вызовы в процессе на сокет, и любые последующие вызовы метода приведут к сбою с WSAENOTCONN.
TCP_NODELAY опция отключает алгоритм Nagle. Алгоритм Nagle используется для сокращения числа мелких пакетов, отправляемых узлом буферизация негласно отправить данные, пока не могут быть отправлены полноразмерных пакет. Однако для некоторых приложений этот алгоритм может сказаться на производительности, и TCP_NODELAY может использоваться для отключения. Писатели приложения не следует устанавливать TCP_NODELAY , когда влияние делать так хорошо понятных и желаемого, так как параметр TCP_NODELAY может иметь значительное отрицательное влияние на производительность сети. TCP_NODELAY – единственный поддерживается параметр сокета, который использует уровень IPPROTO_TCP; все другие варианты использования уровня SOL_SOCKET.
Некоторые реализации Windows Sockets снабжения вывода отладочной информации, если параметр SO_DEBUG установлен в приложении.
SetSockOptподдерживают следующие параметры. Тип определяет тип данных, охватываемых lpOptionValue.
| Значение | Тип | Значение |
| SO_BROADCAST | BOOL | Разрешить передачу широковещательных сообщений на сокете. |
| SO_DEBUG | BOOL | Запись отладочной информации. |
| SO_DONTLINGER | BOOL | Не блокируйте Закрыть ожидание неотправленных данных следует направлять. Установка этого параметра эквивалентен установке SO_LINGER с l_onoff равным нулю. |
| SO_DONTROUTE | BOOL | Не маршрут: отправить непосредственно в интерфейсе. |
| SO_KEEPALIVE | BOOL | Отправить активность. |
| SO_LINGER | структура ожидания | Задерживаться на тесном если неотправленные данные. |
| SO_OOBINLINE | BOOL | Получить данные-диапазона, в потоке обычных данных. |
| SO_RCVBUF | int | Укажите размер буфера для получает. |
| SO_REUSEADDR | BOOL | Позвольте socket, чтобы быть связанными в адрес, который уже используется. (См. Привязка). |
| SO_SNDBUF | int | Задайте размер буфера для отправки. |
| TCP_NODELAY | BOOL | Отключает алгоритм Nagle для отправки объединения. |
Не поддерживается для SetSockOpt варианты распространения программного обеспечения Беркли (BSD):
| Значение | Тип | Значение |
| SO_ACCEPTCONN | BOOL | Прослушивание сокета |
| SO_ERROR | int | Получение статуса ошибки и очистить. |
| SO_RCVLOWAT | int | Получить метку низкого уровня. |
| SO_RCVTIMEO | int | Получить тайм-аут |
| SO_SNDLOWAT | int | Отправить метку низкого уровня. |
| SO_SNDTIMEO | int | Отправить тайм-аут. |
| SO_TYPE | int | Тип разъема. |
| IP_OPTIONS | Установка параметров поле в IP-заголовке. |
Обзор CAsyncSocket |nbsp; Члены класса | Иерархическая схема
См. также CAsyncSocket::AsyncSelect, CAsyncSocket::Bind, CAsyncSocket::Create, CAsyncSocket::GetSockOpt, CAsyncSocket::IOCtl