Опция SO_LINGER определяет, что должно произойти при попытке закрыть сокет TCP, в котором еще находятся неотправленные данные, поставленные в очередь. Обычно функция close() медленно выполняет возврат, а операционная система пытается переслать неотправленные данные в фоновом режиме. При желании можно обеспечить блокировку вызова функции close() до отправки всех данных, установив значение SO_LINGER, что позволит проверять значение, возвращаемое функцией close() для определения того, была ли она выполнена успешно.
В отличие от других опций сокета, в опции SO_LINGER применяется упакованный тип данных, известный под именем структуры linger (что означает задержка). Структура linger состоит из двух целых чисел: флажка, указывающего, должна опция SO_LINGER быть активной, и значения тайм-аута, определяющего, на какое максимальное число секунд должно быть задержано выполнение функции close() после того, как она выполнит возврат. Структура linger должна упаковываться и распаковываться с использованием формата “II”:
$linger = pack("II", $flag, $timeout);
Например, для обеспечения задержки закрытия сокета, вплоть до 120 секунд, можно применить следующий фрагмент кода.
setsockopt(SOCK, SOL SOCKET, SO_LTNGER, pack("II", 1,120) ) or die "Can't set SO_LINGER: $!";
Опция SO_SNDLOWAT и SO_RCVLOWAT устанавливают нижние отметки, соответственно для выходного и входного буферов. Эти опции представляют собой целые числа и должны упаковываться и распаковываться с использованием формата упаковки “I”.
2013-10-30 14:36:12
это интересно Любимый телефон на протяжении всей нашей сегодняшней жизни является не только нашим постоянным спутником и помощником, но и другом. Но, зачастую поцарапав или разбив стекло телефона мы остаемся просто без рук. Профессиональная замена стекла Ipad 4 поможет вам и продлит комфортный симбиоз человек-телефон на долгие годы.