Структура LINGER (winsock.h)

Затяжная структура сохраняет сведения о конкретном сокете, который указывает, как он должен вести себя при постановке данных в очередь для отправки и вызове функции closesocket в сокете.

Синтаксис

typedef struct linger {
  u_short l_onoff;
  u_short l_linger;
} LINGER, *PLINGER, *LPLINGER;

Члены

l_onoff

Тип: u_short

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

Значение Значение
0
Сокет не останется открытым. Это значение устанавливается, если функция setsockopt вызывается с параметром optname , равным SO_DONTLINGER а параметр optval равен нулю.

Это значение также задается, если функция setsockopt вызывается с параметром optname, для которого задано значение SO_LINGER, а в затяжной структуре, передаваемой в параметре optval, член l_onoff имеет значение 0.

Ненулевой
Сокет будет оставаться открытым в течение указанного периода времени. Это значение устанавливается, если функция setsockopt вызывается с параметром optname , равным SO_DONTLINGER , а параметр optval не равен нулю.

Это значение также устанавливается, если функция setsockopt вызывается с параметром optname, для которого задано значение SO_LINGER, а в структуре, передаваемой в параметре optval, член l_onoff имеет ненулевое значение.

l_linger

Тип: u_short

Время затяжки в секундах. Этот член указывает, как долго следует оставаться открытым после вызова функции closesocket , чтобы включить отправку данных в очередь. Этот элемент применим только в том случае, если l_onoff элементу структуры linger задано ненулевое значение.

Это значение устанавливается, если функция setsockopt вызывается с параметром optname , равным SO_LINGER. Параметр optval, передаваемый в функцию setsockopt , должен содержать затяжную структуру, которая копируется во внутреннюю структуру , поддерживаемую для сокета.

Комментарии

Член l_onoff структуры затяжки определяет, должен ли сокет оставаться открытым в течение указанного периода времени после вызова функции closesocket , чтобы разрешить отправку данных в очередь. Несколько сбивает с толку то, что этот элемент можно изменить двумя способами:

  • Вызовите функцию setockopt с параметром optname , для параметра SO_DONTLINGER. Параметр optval определяет, как изменяется член l_onoff .
  • Вызовите функцию setsockopt с параметром optname , для параметра SO_LINGER. Параметр optval указывает, как изменяются члены l_onoff и l_linger .

Элемент l_linger структуры затяжки определяет время в секундах, в течение которого сокет должен оставаться открытым. Этот элемент применим только в том случае, если l_onoff член структуры затяжки является ненулевым.

Чтобы сокет оставался открытым, приложение должно задать для элемента l_onoff ненулевое значение и задать для элемента l_linger требуемое время ожидания в секундах. Чтобы отключить сокет от оставшегося открытым, приложению нужно только задать для элемента l_onoff структуры протяжеления значение 0.

Если приложение вызывает функцию setsockopt с параметром optname , для параметра SO_DONTLINGER , чтобы задать для элемента l_onoff ненулевое значение, значение элемента l_linger не указывается. В этом случае используемое время ожидания зависит от реализации. Если для сокета было установлено предыдущее время ожидания (путем включения SO_LINGER), это значение времени ожидания должно быть восстановлено поставщиком услуг.

Обратите внимание, что не рекомендуется включать ненулевое время ожидания для неблокировочных сокетов.

Функцию getsockopt можно вызвать с параметром optname , для которого задано значение SO_LINGER , чтобы получить текущее значение структуры , связанной с сокетом.

Требования

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

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

Корректное завершение работы, параметры задержки и закрытие сокета

closesocket

getsockopt

setsockopt